繁体   English   中英

使用sp_executesql执行动态SQL时表不存在错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM