2

私はこれまでに次のSQLを持っています...

-- 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)

私がやりたいのは、@@IDENTITY後でSQLの別の挿入ステートメントで使用する結果の値を取得することですが、すでに存在していて挿入されていないユーザーを含むすべてのIDを取得したいと思います。後でいつでも別のselectステートメントを実行できることは知っていますが、それが最善の方法かどうかはわかりません。

INSERT INTO @UserResults (UserResults, UserId)
    SELECT Username, UserId
    FROM User
    INNER JOIN @NewUsers new ON new.Username = User.Username

句を使用して、結果テーブルにすべてのID(新しく挿入されたものや既存のもの)を入力するより効率的な方法があると思いますが、よくOUTPUTわかりません...私が行っている方法よりも良い方法があります?

4

1 に答える 1

3

すでに存在する行も含めて、すべてのIDを表示したいとします。つまり、output条項だけでは不十分です。とにかく、後で新しいクエリが必要になります。

select  u.id
from    @NewUsers nu
join    [User] u
on      u.Username = nu.Username

以前の「存在しない」サブクエリのため、関連するユーザーがいるページはメモリ内にあります。したがって、効率の観点から、これは心配する必要はありません。

于 2012-10-30T17:27:19.500 に答える