SQL Выберите несколько частей строки! - PullRequest
0 голосов
/ 03 мая 2011

Мне нужна помощь. Я хочу извлечь несколько частей строки оператора 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 Ответ

1 голос
/ 03 мая 2011

Чтобы сделать работу надежно, вам нужно написать приличную часть синтаксического анализатора для SQL (или TSQL). И это нетривиальное упражнение!

Вы не учли все правовые варианты утверждений UPDATE. Например, вы можете получить:

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

И это еще до того, как вы примете во внимание такие операции, как присоединение обновлений.

Любое простоватое решение, которое не обрабатывает такие запросы, может привести к недовольству опытных пользователей или хакеров, которые понимают, что вы анализируете, и хотят обойти ваш код обнаружения. Не забывайте, что я мог бы поместить комментарий - или даже несколько комментариев - между любыми токенами в выражении UPDATE. Они могут или не могут попасть в журнал аудита - но, возможно, есть подсказки, похожие на комментарии, и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...