SQL Server执行Grant View权限时报Msg102:对象名含‘-’语法错误
问题原因及修复方案
报错原因
- 特殊字符对象名未被正确识别:SQL Server规定,包含
-、空格、中文或保留字的对象名,必须用方括号[]包裹。你的对象dbo.testing_2022-03-17里的-会被解析器当成算术减号,导致语句被错误解读为dbo.testing_2022 - 03 - 17,触发语法错误。 - 原存储过程的动态SQL拼接有缺陷:你使用的存储过程在拼接授权语句时,没有给架构名和对象名添加方括号,直接拼接成了无包裹的对象路径,遇到特殊字符对象就会触发语法错误。
修复方法
修改存储过程中的动态SQL拼接逻辑,给架构名、对象名(以及用户名)都加上方括号,示例代码如下:
-- 错误的拼接方式(原代码可能类似) SET @SQL = 'GRANT VIEW DEFINITION ON ' + @SchemaName + '.' + @ObjectName + ' TO ' + @UserName; -- 正确的拼接方式 SET @SQL = 'GRANT VIEW DEFINITION ON [' + @SchemaName + '].[' + @ObjectName + '] TO [' + @UserName + '];'
通过方括号包裹,SQL解析器会将包含特殊字符的字符串正确识别为对象名称,避免语法错误。
内容的提问来源于stack exchange,提问作者TITANIXX
相关产品推荐
相关产品推荐

