C# 在sql server存储过程中搜索文本
我创建了一个程序,允许我在SQL Server生成的文本文件中搜索存储过程、函数、表等代码中的关键字。我正在寻找一种方法来找出搜索词(即“ADMIN.TABLE”)在所有代码文件中的引用位置。我使用LINQ查找引用。例如,当我搜索ADMIN.TABLE时,我将列出包含搜索词“ADMIN.TABLE”引用的文本文件的名称“在文本的某个地方。但是,搜索不是绝对的,除非包含ADMIN.TABLE的不同变体,否则无法找到所有引用。因此,要查找所有参考资料,我需要执行以下操作: 1) 搜索“管理表” 2) 搜索“[ADMIN].TABLE” 3) 搜索“ADMIN.[TABLE]” 4) 搜索“[ADMIN].[TABLE]” 我正在考虑使用正则表达式模式,但我不确定如何构建一个涵盖上述不同组合的模式。任何帮助都将不胜感激 问候,C# 在sql server存储过程中搜索文本,c#,sql-server,regex,linq-to-objects,C#,Sql Server,Regex,Linq To Objects,我创建了一个程序,允许我在SQL Server生成的文本文件中搜索存储过程、函数、表等代码中的关键字。我正在寻找一种方法来找出搜索词(即“ADMIN.TABLE”)在所有代码文件中的引用位置。我使用LINQ查找引用。例如,当我搜索ADMIN.TABLE时,我将列出包含搜索词“ADMIN.TABLE”引用的文本文件的名称“在文本的某个地方。但是,搜索不是绝对的,除非包含ADMIN.TABLE的不同变体,否则无法找到所有引用。因此,要查找所有参考资料,我需要执行以下操作: 1) 搜索“管理表” 2)
Tor呃?表示匹配上一组0或1次。[和]都有特殊的意义,所以你必须用它们来逃避。因此:
new Regex(@"\[?ADMIN\]?.\[?TABLE\]?")
你要是问我就行了。嗯?表示匹配上一组0或1次。[和]都有特殊的意义,所以你必须用它们来逃避。因此:
new Regex(@"\[?ADMIN\]?.\[?TABLE\]?")
如果你问的话,我会的。我想你可能在重新发明轮子。你看过sp_了吗?我将列出依赖于指定表的所有对象
我知道您正在处理文本文件,但是如果您可以生成sp_dependens结果和脚本,这可能会解决您的问题 我想你可能正在重新发明轮子。你看过sp_了吗?我将列出依赖于指定表的所有对象
我知道您正在处理文本文件,但是如果您可以生成sp_dependens结果和脚本,这可能会解决您的问题 尝试此操作,它将遍历目录中的所有文件,并使用不区分大小写的正则表达式扫描它们(您可以通过更改搜索选项更改directory.GetFiles调用以仅搜索目录而不检查子目录):
尝试此操作,它将循环遍历目录中的所有文件,并使用不区分大小写的正则表达式扫描它们(您可以更改directory.GetFiles调用以仅搜索目录,而不通过更改搜索选项检查子目录):
如果您没有设置如何进行,那么可能需要解析sql脚本,然后使用对象模型专门查找schema=admin&&table=table 备选案文1: 生成估计的查询计划并从中解析表引用。如果您使用的是sql 2005+,则可以将其作为xml进行查询,如下所示:
;WITH XMLNAMESPACES (default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select
t.n.value('./@Database', 'sysname') as DatabaseName,
t.n.value('./@Schema', 'sysname') as SchemaName,
t.n.value('./@Table', 'sysname') as TableName,
t.n.value('./@Column', 'sysname') as ColName
from @x.nodes('//ColumnReference') as t(n)
go
备选案文2:
如果要在客户端执行此操作并使用sql2008,请添加对C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.SqlParser.dll的引用,并执行类似操作
SqlScript script = Parser.Parse(@"create proc sp1 as select 'abc' as abc1");
然后,您可以处理script.Xml并查找如下节点
我相信您也可以在对象模型中找到它的强类型,因为我在程序集中看到了SqlTableRefExpression,但我不确定要深入到哪里。如果您不知道如何进行,您可能需要解析sql脚本,然后使用对象模型专门查找schema=admin&&table=table 备选案文1: 生成估计的查询计划并从中解析表引用。如果您使用的是sql 2005+,则可以将其作为xml进行查询,如下所示:
;WITH XMLNAMESPACES (default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select
t.n.value('./@Database', 'sysname') as DatabaseName,
t.n.value('./@Schema', 'sysname') as SchemaName,
t.n.value('./@Table', 'sysname') as TableName,
t.n.value('./@Column', 'sysname') as ColName
from @x.nodes('//ColumnReference') as t(n)
go
备选案文2:
如果要在客户端执行此操作并使用sql2008,请添加对C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.SqlParser.dll的引用,并执行类似操作
SqlScript script = Parser.Parse(@"create proc sp1 as select 'abc' as abc1");
然后,您可以处理script.Xml并查找如下节点
我相信您也可以在对象模型中找到它的强类型,因为我在程序集中看到了SqlTableRefExpression,但我不确定要深入到哪里