2011-05-02 6 views
0

도움이 필요합니다. SQL 구문 문자열의 여러 부분을 추출하고 싶습니다. 예. . 내가 문자열의 예를 가지고 :SQL 문자열의 다중 부분을 선택하십시오!

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

그래서, 나는 일반적으로 굵은 ('XXX'및 'YYY'에서이 값을 추출 할을, 컬럼의 이름은 UPDATE 문을 통해 변경 다음은

. 예 한 부분을 선택, 문자열 기능을 사용하지만, 내 경우에는 내가 여러 부분이 필요합니다

문 다음 SUBSTRING (문, NULLIF은 (CHARINDEX ('SET' '% 업데이트 %', 문) 등을 0) + LEN ('SET') + 1, NULLIF (CHARINDEX ('=', statement), 0) - (NULLIF (CHARINDEX ('SET', statement), 0) + L EN ('SET') +1))

고마워요!

+0

적어도 하나 이상의 UPDATE 문에서 열 이름을 추출해야합니다. T-SQL 및 하위 문자열 함수를 사용했지만 여러 부분을 사용할 수 없습니다. 다음은 '% UPDATE %'와 같은 문을 예로 들었습니다. SUBSTRING (문, NULLIF (CHARINDEX ('SET', 문), 0) + LEN ('SET') +1, NULLIF (CHARINDEX (' = ', statement), 0) - (NULLIF (CHARINDEX ('SET ', statement), 0) + LEN ('SET ') + 1)) – asterix55

+1

전혀 어렵지 않을 것입니다. TSQL에서. 왜 당신은 요구 사항을 가지고 있습니까? (당신이하려고하는 것은 무엇이든 할 수있는 다른 방법이있을 수 있습니다). 그리고이 진술은 처음부터 어디에서 왔습니까? –

+0

그것은 사용자가 수행 한 일반적인 UPDATE 쿼리입니다. 따라서 업데이트 된 항목을 가져와야합니다. 이 경우 "SET"와 "="사이 및 ","과 "="사이에서 값을 추출해야합니다. – asterix55

답변

1

작업을 안정적으로 수행하려면 SQL (또는 TSQL) 용 파서의 적절한 부분을 작성해야합니다. 그리고 그것은 사소한 운동입니다!

UPDATE 문의 모든 법적 변형을 고려하지 않았습니다.

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

및 계정 작업이 업데이트에 가입 좋아에 취할 전에이다 : 예를 들어, 당신은 얻을 수 있습니다.

이러한 쿼리를 처리하지 않는 단순한 솔루션은 고급 사용자 또는 구문 분석 한 내용을 인식하고 탐지 코드를 무시하려는 해커를 파울 가능성이 있습니다. UPDATE 문에있는 토큰 사이에 주석 또는 여러 주석을 추가 할 수 있다는 것을 잊지 마십시오. 이것들은 감사 로그에 기록 될 수도 있고 그렇지 않을 수도 있습니다.하지만 주석처럼 보이는 힌트가있을 것입니다.

+0

이 변경된 경우 열 이름을 선택하는 방법에 대해 알고 계십니까? – asterix55

관련 문제