【发布时间】:2012-04-03 08:48:12
【问题描述】:
问题:
给定一个类似的 SQL 字符串
CREATE VIEW TestView AS
SELECT value1, value2
FROM TABLE_0
UNION
(SELECT * FROM TABLE_2) AS value1
,value2
FROM TABLE_12
UNION
SELECT * FROM TABLE_3
(小写)
还有一个字符串数组,比如
string[] tables = new string[]{"table_1", "table_2", "table_3"}
现在我做到了:
if (strViewDefinition.Contains(strObjectName)) // aaaaargh
对于表中的每个strObjectName,检查视图是否依赖于这个对象。
但这在 table_12 上失败(并导致循环依赖),例如,因为表包含“table_1”。啊。
我需要一个可以检查视图定义是否包含函数名、表值函数或其他视图的正则表达式...
( 用于检查 System.Text.RegularExpressions.Regex.IsMatch( )
我的试验是:
string whateverneedsescaping= System.Text.RegularExpressions.Regex.Escape(@"+-*\/%=,\n\r");
string fieldsep = @"[\s\n\r," + whateverneedsescaping+ "]*";
string strPattern = fieldsep + "VIEW/FUNCTION_NAME" + fieldsep;
但它失败了,而且它没有考虑括号中包含的对象名称,例如
"[TABLE_NAME]"
有人可以帮忙吗?
【问题讨论】:
-
@Mark Bannister:是的,这是 SQL-Server。但是 SQL-Server 2005。另外,它也适用于其他 Db 系统,所以不要推荐我使用 SMO(SQL 2005 也有问题);-)