簡體   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