![](/img/trans.png)
[英]Passing user defined table parameter to dynamic sql, sp_executesql
[英]Table doesn't exist error when execuitng dynamic sql with sp_executesql
例如,如果我使用SSMS打开与数据库的连接,并且运行如下查询:
SELECT * FROM MySchema.MyTable
查询执行没有错误。
如果我像这样运行动态SQL
declare var @qry nvarchar(200);
set @qry = N'SELECT * FROM MySchema.MyTable'
exec master.sys.sp_executesql @qry
我收到一条错误消息,指出该表不存在。
如果我把数据库名前缀前MySchema.MyTable
名称,即MyDb.MySchema.MyTable
查询正确运行。
如何在不使用动态SQL的情况下指定数据库名称的情况下避免该错误?
尝试这个!
改变这个
exec master.sys.sp_executesql @qry
至
exec sp_executesql @qry
要么
exec @qry
递归和koushik veldanda的两个答案都可以很好地工作,但这可以更深入地了解问题:
问题是执行查询
exec master.sys.sp_execute_sql @qry
将上下文更改为master
数据库,因此MySchema.MyTable
是不可访问的,因为它不属于master
,而是MyDb
。
如果查询执行
exec sys.sp_execute_sql @qry
上下文是在当前数据库中维护的,因此该表是可访问的,并且查询运行没有问题。
采用
exec @sql
如果有任何输出参数,那就足够了
exec sp_executesql
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.