我知道这是一个数据库论坛,但由于我要查找的文本是特定于 SQL 的,我希望有人能指出我正确的方向。我需要搜索代码以查找在没有明确指定表列名称的情况下编写 INSERT 查询的位置。例如,我需要找到这样的东西:
INSERT tablename SELECT col1, col2 FROM anothertable
INSERT INTO tablename VALUES (1), (2)
如果您想知道,当列名没有在表名之后显式指定时,SQL Server 将隐含地假定所有列都已列出。因此,如果您向表中添加新列,您的代码将中断。
我设想的正则表达式模式将寻找以下内容:
INSERT
后跟任何字符,然后是/之前没有出现右括号“)”的任何一个SELECT
或。VALUES
SELECT
VALUES
我正在考虑用另一种方式来表达它,但我不确定它是否更容易:
INSERT
或INSERT INT
后跟空格/制表符/cr/lf,后跟任意数量的字符,后跟空格/制表符/cr/lf,不跟左括号“(”
我很感激任何指示。
做你想做的“神奇”正则表达式是:
我在“The Regex Coach”(一个测试正则表达式的免费软件)中测试了一些场景。我确保它也适用于 [dbo].[tablename] 或 "tablename" 等表。
如果您不想使用 LIKE 语句来匹配 INSERTS,您可以使用 CLR 启用正则表达式 - 请参见下文:
http://www.codeproject.com/Articles/42764/Regular-Expressions-in-MS-SQL-Server