这有点令人困惑,因为它之前工作过,我添加了 1 个小更改,然后在我的 Web 应用程序中收到此错误消息。 (我还有其他案例,为了简单起见,我只是把其他案例拿出来)
之前有效的原始代码:
ALTER PROCEDURE [dbo].[GetRoles]
(@reportid Decimal, @dom varchar(10))
AS
DECLARE @sql varchar(2000)
SELECT @sql =
Case @reportid
WHEN 1 THEN
'select u.id as userId, u.domain, u.isAdmin, u.email, u.canReport, a.[site], a.bldgNum, a.dataCenterNum, l.shortName, l.[description], a.canApprove, a.canComplete
from locAdmin a
inner join location l on (a.site=l.site and a.bldgNum = l.bldgNum and a.dataCenterNum = l.dataCenterNum)
right outer join [user] u on u.id=a.userId and u.domain=a.domain
where u.isAdmin = 1'
End
EXEC (@sql)
我所做的唯一改变是添加
and u.domain = @dom'
最后的 where u.isAdmin = 1' 之后,看起来像这样
where u.isAdmin = 1 and u.domain = @dom'
最佳答案
执行动态 SQL 时,需要添加 @dom
作为参数。
将 EXEC (@sql)
替换为 exec sp_executesql @sql, N'@dom varchar(10)', @dom
并更改 DECLARE @sql varchar (2000)
到 DECLARE @sql nvarchar(2000)
。
关于c# - 必须声明标量变量 "@dom",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11908305/