c# - 必须声明标量变量 "@dom"

标签 c# t-sql c#-4.0

这有点令人困惑,因为它之前工作过,我添加了 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/

相关文章:

c# - 无法加载文件或程序集 "Microsoft.VisualStudio.Services.Common, Version=12.0.21005.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

c# - 为什么会产生AND指令?

sql - 按日期选择出现次数最多的记录

c# - 如何检查对象是否不是特定类型?

visual-studio-2010 - 使用 TFS API 进行区分

c# - 在列表框内添加一个动态文本框

c# - 如何创建一个名为 "checked"的属性?

sql-server - 根据变化的小时费率计算价格

sql - 如何通过CROSS APPLY获取多级嵌套JSON属性的值?

c# - [opt] 在 MSIL 中是什么意思?