Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server 2008中,如何获取在给定表中插入数据的存储过程列表?_Sql_Sql Server - Fatal编程技术网

在SQL Server 2008中,如何获取在给定表中插入数据的存储过程列表?

在SQL Server 2008中,如何获取在给定表中插入数据的存储过程列表?,sql,sql-server,Sql,Sql Server,我需要在表中添加一个字段。此字段需要填充不同的值 我已经知道在该表中插入新记录的主要存储过程,这些存储过程需要修改。为了安全起见,有没有一种方法可以获得在表中插入记录的存储过程的完整列表 sys.dm_sql_referencement_entities为我提供了依赖于此表的存储过程列表,但我只需要插入记录的存储过程,而不是简单查询记录的存储过程 谢谢。您可以尝试查看存储过程本身的代码,但它可能不是100%匹配。关于以下内容: SELECT OBJECT_NAME(S.object_id) St

我需要在表中添加一个字段。此字段需要填充不同的值

我已经知道在该表中插入新记录的主要存储过程,这些存储过程需要修改。为了安全起见,有没有一种方法可以获得在表中插入记录的存储过程的完整列表

sys.dm_sql_referencement_entities为我提供了依赖于此表的存储过程列表,但我只需要插入记录的存储过程,而不是简单查询记录的存储过程


谢谢。

您可以尝试查看存储过程本身的代码,但它可能不是100%匹配。关于以下内容:

SELECT OBJECT_NAME(S.object_id) StoredProcedure
FROM sys.sql_modules S
JOIN sys.procedures P
ON S.object_id = P.object_id
WHERE Definition LIKE '%INSERT INTO myTable%' 
OR Definition LIKE '%INSERT myTable%' 

一个低技术的战术比你想象的要好

将架构转储为文本。然后在命令提示下

$ grep -i 'insert into your-table-name' dumped-schema-file
我不知道搜索文本字符串的Windows实用程序

这可能会找到大多数插入。你也可以试试

$ grep -i -B2 'your-table-name' dumped-schema-file
这将打印与“您的表名”匹配的每一行,以及它前面的三行,以便您可以查找以下内容

insert into
your-table-name

SQL Server杂志在几年前发表了一篇题为“SQL Server”的文章,其中提供了一个存储过程

接受输入字符串并进行搜索 syscomments、sysobjects和 本地数据库中的syscolumns系统表 数据库中的任何引用 一串输出结果集显示 所有表、过程、视图和 包含 指定的输入字符串


它基本上是你数据库的一个grep。这非常有用。

我不知道我们有办法根据DML语句(insert vs delete)获得硬匹配,但您可以尝试将引用实体数据集与字符串匹配进行比较,如下所示:

declare @ObjectName nvarchar(517) = 'dbo.Person';

declare @match table (sName nvarchar(500), oName nvarchar(500))
insert into @Match (sName, oName)
    select distinct
            object_schema_name([object_id], db_id()),
            object_name([object_id], db_id())
    from    sys.sql_modules
    where   [definition] like '%'+@ObjectName+'%' and
            (   -- match "insert into dbo.Person" or "insert into Person"
                [definition] like '%insert into ' + @ObjectName + '%' or
                [definition] like '%insert into ' + replace(@ObjectName, 'dbo.', '') + '%' or
                -- match "insert dbo.Person" or "insert Person"
                [definition] like '%insert ' + @ObjectName + '%' or
                [definition] like '%insert ' + replace(@ObjectName, 'dbo.', '') + '%' 
            )

select  *   
from    sys.dm_sql_referencing_entities(@ObjectName, 'OBJECT') re
left
join    @Match d on
        re.referencing_schema_name = d.sName and
        re.referencing_entity_name = d.oName
where   d.sName is not null -- comment this line to compare all possible ref entities 
return

回答不错,但不完整。当使用模式前缀时,这不起作用,不会搜索整个单词,而且会忽略方括号。