0

必要なデータを返す方法を実現し、同じストアド プロシージャ内の別のテーブルを更新する最も経済的な方法を見つけようとしています。

私の問題を説明するために、以下のSQLを大幅に簡素化しました。これが私が達成したいことです:

DECLARE @UserID INT
SELECT TOP(1) @UserID = UserID, UserName, email, (#Loads of other columns#) FROM Users
UPDATE Logins SET LoggedIn = 1 WHERE UserID = @UserID

返されたすべての列がローカル変数に割り当てられていることを確認することでこれを実行できることは理解していますが、効率的な SPROC には数が多すぎます。

SELECT ステートメントを 2 回実行する必要はありません (1 回はデータを返すため、もう 1 回は変数を設定するため、更新ステートメントの準備ができています)。

何か提案はありますか?ありがとう、スコット

4

1 に答える 1

1

を使用OUTPUTしてローカル テーブル変数に値を取得できますが、ローカルを使用しSELECTてテーブル変数から単一の値を取得する必要があります。

DECLARE @TBL TABLE(userid int, username varchar(50), email varchar(50), logged bit)

DECLARE @userid int

UPDATE TOP (1) Users
SET logged = 1
OUTPUT deleted.* INTO @TBL

SELECT top (1) @userid = userid from @TBL

SELECT @userid

フィドルの例

于 2012-10-24T12:55:33.250 に答える