Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
C# 在sql server存储过程中搜索文本_C#_Sql Server_Regex_Linq To Objects - Fatal编程技术网

C# 在sql server存储过程中搜索文本

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)

我创建了一个程序,允许我在SQL Server生成的文本文件中搜索存储过程、函数、表等代码中的关键字。我正在寻找一种方法来找出搜索词(即“ADMIN.TABLE”)在所有代码文件中的引用位置。我使用LINQ查找引用。例如,当我搜索ADMIN.TABLE时,我将列出包含搜索词“ADMIN.TABLE”引用的文本文件的名称“在文本的某个地方。但是,搜索不是绝对的,除非包含ADMIN.TABLE的不同变体,否则无法找到所有引用。因此,要查找所有参考资料,我需要执行以下操作: 1) 搜索“管理表” 2) 搜索“[ADMIN].TABLE” 3) 搜索“ADMIN.[TABLE]” 4) 搜索“[ADMIN].[TABLE]”

我正在考虑使用正则表达式模式,但我不确定如何构建一个涵盖上述不同组合的模式。任何帮助都将不胜感激

问候,


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,但我不确定要深入到哪里