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