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