는 지금까지 다음과 같은 SQL ...새로 삽입되었거나 이미 존재하는 레코드의 ID 값을 얻는 방법은 무엇입니까?
-- SETUP MY SQL
DECLARE @NewUsers TABLE (Username VARCHAR(32), Name VARCHAR(32))
DECLARE @UserResults TABLE (UserName VARCHAR(32), UserId INT)
INSERT INTO @NewUsers (Username, Name)
VALUES ('johndoe', 'John Doe'),
('janedoe', 'Jane Doe'),
('mrsmith', 'Mr Smith') -- This guy already exists in the DB though...
-- INSERT STATEMENT
INSERT INTO User (Username, Name)
SELECT new.Username, new.Name
FROM @NewUsers new
WHERE NOT EXISTS (SELECT 1 FROM dbo.User WHERE User.Username = new.Username)
이 내가 내 SQL에서 나중에 또 다른 삽입 문에서 사용하는 결과 @@IDENTITY
값을 얻을 수있다 싶지,하지만 난 싶어 ALL (이미 존재했지만 삽입되지 않은 사용자 포함). 나는 나중에 다른 선택 진술을 할 수 있다는 것을 알고 있지만 그것이 최선의 방법이라고 확신하지 못합니까?
INSERT INTO @UserResults (UserResults, UserId)
SELECT Username, UserId
FROM User
INNER JOIN @NewUsers new ON new.Username = User.Username
나는 모든 아이덴티티 OUTPUT
절을 사용하여 (새로 삽입 및/또는 기존)과 결과 테이블을 채울 수있는보다 효율적인 방법이 생각하지만, 잘 모르겠어요은 ... 거기가 낫다 내가하는 방식보다?
기본적으로 나는 이미 올바르게하고있었습니다 ... –
예, 동의합니다. 오늘날의 데이터베이스는 매우 빠릅니다. 실제 성능 문제가 발생할 때까지 성능 고려 사항을 무시하는 것이 가장 좋습니다. # 1 고려 사항은 명확해야하며 현재 접근 방식은 간단하고 좋습니다. – Andomar