簡體   English   中英

SQL-查找存儲過程中的所有插入

[英]SQL - Find all inserts in a stored procedure

長時間聽眾,第一次海報。 我是SQL的新手,正在嘗試幫助另一位同事構建一些腳本以與測試工具一起使用。 我們的目標是在更新我們的應用程序的代碼后,擁有能夠根據一組條件檢查表的內容,以確保存儲過程仍在生成預期的數據。

為此(我失去了您嗎?)我正在嘗試找到一種方法,以查找給定的存儲過程正在更新哪些表和那些表中的哪些列。 我找到了一個腳本,該腳本可以告訴我存儲過程使用哪些表,但是找不到找到使用哪些列的方法。

這是我找到表的條件:

WITH stored_procedures AS (
SELECT
o.name AS proc_name, oo.name AS table_name, d.resultobj AS updated,
ROW_NUMBER() OVER(partition by o.name,oo.name ORDER BY o.name,oo.name) AS row
FROM sysdepends d 
INNER JOIN sysobjects o ON o.id=d.id
INNER JOIN sysobjects oo ON oo.id=d.depid
WHERE o.xtype = 'P' AND o.name = 'stored_procedure_here')
SELECT table_name FROM stored_procedures
WHERE row = 1 AND updated = 1 
ORDER BY proc_name,table_name 

有任何想法嗎? 這可能嗎?

謝謝!

您可以創建類似“協議表”之類的東西,跟蹤所有插入的蜜蜂。 該協議表將由觸發器填充,每次插入一行時都會執行。

CREATE TRIGGER MyTrigger ON tableName /*Name of table which will have a protocol*/
FOR INSERT
AS

INSERT INTO protocol-table (protocol_id, tableName_id,nameOfTable, GETDATE()) /*protocol_id could be an auto-generated key*/
SELECT NULL, tableName.idField,'tableName', NULL                        /*tableName_id is the ID-Field of the table you protocol*/
FROM inserted /*inserted is a "logical table". Leave this the way it is */

GO

每當一個INSERT是你的表的制作ID此的INSERT和誰是受此影響的表的名稱INSERT將出現在該協議。

缺點:您必須對每個表都執行此操作,以確保所有協議都已協議化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM