【发布时间】:2013-02-11 06:45:51
【问题描述】:
我正在尝试从 SQL 脚本中提取表名。我有以下字符串:
from db1.tableX tbx1 --quantity table
inner join tableY tbx2 on tbx1.xyz=tbx2.xyz
我不想匹配这个字符串,因为tabley 没有以数据库名称为前缀。我试图做到这一点的方法是在数据库名称之前的字符串中检测单词“on”。
我的正则表达式匹配tablex,但也匹配tbx1,我不希望我的表达式匹配。
我希望它只在这种情况下匹配。
from db1.tableX tbx1 --quantity table
inner join db1.tableY tbx2 on tbx1.xyz = tbx2.xyz
我的正则表达式应该给我tableX 和tableY,因为它们以数据库名称为前缀。
这是我的表达:
(insert\s+into|from|inner\s+join|left\s+outer\s+join|join)\s+[\sa-zA-Z0-9_$#-]*\.\s*(?<table>[a-zA-Z0-9_]+)(?=\s+[a-zA-Z0-9_$#-]+)*
【问题讨论】:
-
我不清楚这两种情况之间的区别。唯一的区别在于数据库名称(db1 而不是 dbo)。你还说你尝试检测“on”这个词;我在你的正则表达式中没有看到它。
-
我的帖子由 abatishchev 编辑。两者之间的区别在于第一种情况,另一种情况是,在第一种情况下,tableY 没有以数据库名称为前缀(我不确定管理员为什么编辑该帖子),在第二种情况下,表的前缀为一个数据库名。在第一种情况下,我不想匹配 tableY,因为它没有以数据库名称为前缀。
-
如果你有一个数据库名称,那么 SQL-Server 的正确语法应该是
database.owner.table或database..table,即:db1.dbo.table或db1..table。 -
tableY 在这种情况下是 teradata 中的易失性表。它不需要前缀,我不想匹配它
标签: c# sql regex negative-lookbehind