我正在尝试找到一种最经济的方式来实现返回所需数据的方法,并在同一存储过程中更新另一个表。
我已经大大简化了下面的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语句(一次返回数据,一次设置变量,为更新语句做好准备)
有什么建议吗? 谢谢, 斯科特
答案 0 :(得分: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