You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的SQL游标循环中EXEC语句出现语法错误?

问题原因与解决方案

语法错误原因

你遇到的Msg 102错误,根源在于EXEC语句的括号范围错误:

EXEC ('GRANT INSERT ON dbo.tbl_Audit TO ' + '[' + @User) + ']'

这里你仅将('GRANT...' + '[' + @User)放在EXEC的括号内,后续的+ ']'属于括号外的无效语法——SQL引擎无法识别把EXEC调用与字符串拼接运算符混用的写法,因此报错。而PRINT语句可以直接接收完整的字符串拼接表达式,所以替换后语法正常。

修正方案

方案1:修正括号范围

把整个字符串拼接逻辑完整放入EXEC的括号内:

EXEC ('GRANT INSERT ON dbo.tbl_Audit TO ' + '[' + @User + ']')

方案2:使用QUOTENAME函数(更推荐)

QUOTENAME函数会自动为标识符添加方括号,还能处理包含特殊字符的用户名,避免语法错误或SQL注入风险:

EXEC ('GRANT INSERT ON dbo.tbl_Audit TO ' + QUOTENAME(@User))

完整修正后的代码

USE BillingTracking

DECLARE @MyCursor CURSOR;
DECLARE @User varchar(100);
BEGIN
    SET @MyCursor = CURSOR FOR
    SELECT SqlUser FROM dbo.tbl_Users ORDER BY SqlUser
    
    OPEN @MyCursor 
    FETCH NEXT FROM @MyCursor 
    INTO @User

    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC ('GRANT INSERT ON dbo.tbl_Audit TO ' + QUOTENAME(@User))
        FETCH NEXT FROM @MyCursor 
        INTO @User 
    END; 

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END;

内容的提问来源于stack exchange,提问作者TheSearcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:47:04