【问题标题】:Incorrect syntax near ')'. in variable declaration of sql')' 附近的语法不正确。在sql的变量声明中
【发布时间】:2014-01-23 06:22:48
【问题描述】:

我有以下查询:

DECLARE @userrole as VARCHAR(100)

SELECT @userrole = UserRole 
FROM UserMenuRights 
WHERE idAdmin = 36

Execute('Select idRole,RoleName from UserRoles WHERE idRole IN ('+@userrole+')')

我收到错误:

消息 102,第 15 级,状态 1,第 1 行
')' 附近的语法不正确。

我已经检查了第一行DECLARE @userrole as VARCHAR(100)似乎没有语法问题。

还检查了最后一行:

Execute('Select idRole,RoleName from UserRoles WHERE idRole IN ('+@userrole+')')

似乎也是正确的字符串附件。

我哪里做错了?

请帮帮我。

【问题讨论】:

  • 字段idRole的数据类型是什么?

标签: sql database sql-server-2008-r2 syntax-error


【解决方案1】:

试试这个,需要加单引号

DECLARE @userrole as VARCHAR(100)
SELECT @userrole =UserRole FROM UserMenuRights WHERE idAdmin =36
Execute('Select idRole,RoleName from UserRoles WHERE idRole IN ('''+@userrole+''')')

或者你像这样构造它

SELECT  idRole
        ,RoleName
FROM    UserRoles
WHERE   idRole IN (
            SELECT UserRole FROM UserMenuRights WHERE idAdmin =36
            )

【讨论】:

  • 为了添加一点解释,您将 userrole 定义为 varchar,jade 建议的那些额外引号是为了在 execute() 中的引用命令中转义单引号
【解决方案2】:
DECLARE @userrole as VARCHAR(100)
SELECT @userrole =UserRole FROM UserMenuRights WHERE idAdmin =36

-- Use sp_executesql instead
DECLARE @Statement NVARCHAR(MAX)
SET @Statement = N'SELECT idRole, RoleName FROM UserRoles WHERE idRole = @UserRole'

EXEC sp_executesql @statement, N'@UserRole varchar(100)', @UserRole

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多