SQL选择字符串的多个部分!

时间:2011-05-02 21:11:20

标签: sql sql-server tsql parsing

我需要帮助。 我想提取sql语句字符串的多个部分。 恩。我有一个字符串的例子:

UPDATE table SET **XXX** = '1', **YYY** = 2 WHERE ID = 24125; 

所以,我想以粗体('xxx'和'yyy')提取这些值。通常,通过Update语句更改列的名称。

以下是使用子字符串函数的示例,仅用于选择一个部分,但在我的情况下,我需要多个部分:

语句如'%UPDATE%'那么 SUBSTRING(语句,NULLIF(CHARINDEX( 'SET',语句),0)+ LEN( 'SET')+ 1, NULLIF(CHARINDEX( '=',语句),0) - (NULLIF(CHARINDEX( 'SET',语句),0)+ LEN( 'SET')+ 1))

谢谢!

1 个答案:

答案 0 :(得分:1)

为了可靠地完成这项工作,你将不得不为SQL(或TSQL)编写一个很好的解析器部分。这是一项非常重要的工作!

您尚未考虑UPDATE语句的所有法律变体。例如,您可能会得到:

UPDATE Sometable
   SET (Col1, Col2, Col3) = ((SELECT Value1, Value2, Value3 FROM ... WHERE ...)),
       Col4 = (SELECT Value4 FROM ... WHERE ...)
 WHERE ...;

在您考虑加入更新等操作之前就已经开始了。

任何不处理此类查询的简单易懂的解决方案都有可能与高级用户或黑客实现相同的行为,他们会意识到您要解析的内容并希望绕过您的检测代码。不要忘记我可以在UPDATE语句中的任何标记之间发表评论 - 甚至是几条评论。这些可能会或可能不会进入审计日志 - 但是可能会有类似注释的提示,等等。