SQL Server中EXEC执行动态SQL时错误解析数据库名称问题
问题原因及解决办法
错误原因
直接用EXEC @query执行动态SQL时,SQL Server会把变量@query的内容识别为存储过程名称或者数据库操作对象,而非要执行的SQL语句。所以它错误地把整个语句的开头部分SELECT Count(*) FROM ReportServer$DEVSVR1当成了数据库名称,触发了“数据库不存在”的报错。
解决方法
- 用括号包裹变量,让SQL Server将其解析为SQL语句执行:
EXEC(@query); - 更推荐使用官方推荐的
sp_executesql存储过程来执行动态SQL,这种方式在处理带参数的动态SQL时更安全、更规范:EXEC sp_executesql @query;
内容的提问来源于stack exchange,提问作者MartMX
相关产品推荐
相关产品推荐

