不明白错误消息:必须声明标量变量"@Username".

Luu*_*nen 16 sql

我有一个简单的脚本更新并显示useraccount.(与管理工作室2010合作)为了防止用户错误,我想在SQL中使用变量(之前从未这样做过).

阅读教程时,它应该像下面的代码示例一样简单,除了我收到错误消息.在网上搜索具有相同错误的人,我最终看到了具有相同错误的非常复杂的代码.有人能给我一个线索吗?

DECLARE @Username nvarchar(256) 
Set @Username = 'theUsername'

UPDATE aspnet_Membership
SET IsLockedOut = 0
WHERE UserId IN (SELECT U.UserId
FROM aspnet_Users as U inner join aspnet_Membership M on U.UserId = M.UserId
WHERE u.UserName = @Username)
GO 
SELECT U.UserId, U.UserName, M.Password, M.IsLockedOut, U.LastActivityDate
FROM aspnet_Users as U inner join aspnet_Membership M on U.UserId = M.UserId
WHERE u.UserName = @Username
Run Code Online (Sandbox Code Playgroud)

消息137,级别15,状态2,行3必须声明标量变量"@Username".

ale*_*exm 55

Transact-SQL中的变量范围受批处理限制.您的脚本包含两个由"GO"分隔的批次

  • 提到"批处理"的唯一答案+1 (4认同)

rab*_*dde 6

GO脚本中有一个内部,GO将您的脚本分成两个批次,因此必须在之后重新定义所有使用的变量GO,因为范围仅限于此批次.

顺便说一句:我不认为,这GO是必要的,不是吗?

感谢@gbn和@alexm给出提示,将GO单独的语句分成批次而不是交易,另请参阅http://msdn.microsoft.com/en-us/library/ms188037.aspx

  • 你是什​​么意思写*交易*?AFAIK`GO`与交易没有任何共同之处(严格意义上是数据库). (2认同)