Sql-Server

是否可以將 sp_executesql “綁定”到呼叫過程,如查詢儲存中記錄的那樣?

  • March 5, 2021

執行的語句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

引用自:https://dba.stackexchange.com/questions/286463