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