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 语句(一次返回数据,一次设置变量,准备更新语句)

有什么建议吗?谢谢,斯科特

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 回答