Sql-Server
是否可以將 sp_executesql “綁定”到呼叫過程,如查詢儲存中記錄的那樣?
執行的語句
sp_executesql
看起來通常與它們出現的過程“未綁定”。通過“綁定”,我的意思是“與呼叫對象相關聯”。目標是讓查詢儲存中的語句關聯起來更簡單:
select object_name(q.object_id) as [Statement Context] from sys.query_store_query q where 1=1 and object_name(q.object_id) like 'This will be the procedure name for ''normal'' statements'
雖然可以在將出現在 中的語句中嵌入註釋
query_sql_text
,但這感覺有點多餘。此外,似乎
sp_executesql
需要某種形式的上下文綁定,因為動態 SQL可以訪問周圍範圍內的非全域臨時表:沒有綁定,SQL Server 如何確保創建的計劃中臨時表模式的有效性和穩定性?
我認為嵌入註釋是目前從查詢儲存/擴展事件/跟踪查看時區分不同動態 SQL 的最佳方式 - 不幸的是。
我對動態 sql 和臨時表有很多執行時錯誤,所以我認為它不能確保臨時表的有效性和穩定性。
您可以使用 @@nestlevel 查看呼叫堆棧中目前有多少 SP / 函式,但我認為您需要更多資訊。您可以使用 error_procedure() - 但只能在 catch 塊中使用,聽起來您想要微軟添加一個函式 current_procedure() 或 calling_procedure() ,它將告訴您目前常式或呼叫此常式的常式的名稱- 也許在這裡添加一個請求?:- https://feedback.azure.com/forums/908035-sql-server