2017-02-20 2 views
1

& 및 그에 상응하는 &을 포함 할 수있는 메모 필드가 있습니다. 앰퍼샌드의 모든 인스턴스가 HTML에 상응하는지 확인하기위한 스크립트를 작성해야합니다. 아래의 스크립트를 가지고 있지만 WHERE 절은 &의 개별 인스턴스 (문자열)를 메모 필드, 전체적으로 필드로 간주하지 않습니다.이를 수행하는 방법에 대한 아이디어가 있습니까? 감사.WHERE 절을 기반으로 한 SQL 문자열 바꾸기

UPDATE 
    STOCKMEM 
SET 
    INETFDESC = CAST(REPLACE(CAST(INETFDESC as NVarchar(MAX)),'&','&') AS NText) 
WHERE 
    INETFDESC LIKE '%&%' 
    AND INETFDESC NOT LIKE '%&%' 
+0

당신이 * 무엇을 의미합니까를 * "는이'WHERE' 절'&'의 개별 인스턴스를 고려하지 않는 것?" 샘플 데이터를 보여줄 수 있습니까? – Siyual

+0

수십만 개의 행이 있고 이것은 메모 필드이므로 어디에서 & amp;를 처리 할 때만 업데이트가 필요한 문자열 만 처리해야합니다. - 그게 도움이 되니? – Justin

답변

5

대신을 시도해보십시오

UPDATE STOCKMEM 
SET INETFDESC = CAST(
         REPLACE(
           REPLACE(
             CAST(INETFDESC as NVarchar(MAX)) 
           ,'&','&') 
         , '&', ,'&')AS NText) 
WHERE INETFDESC LIKE '%&[^amp;]%' 

첫 번째 && 변경됩니다 교체, 두 번째는 & 다시 모든 &을 대체합니다.

현재 NText 데이터 형식이 depricated이므로 nvarchar(max)으로 변환해야합니다. MSDN에서 :

중요!ntext, 텍스트이미지 데이터 형식은 이후 버전의 SQL Server에서 제거됩니다. 새로운 개발 작업에서는 이러한 데이터 유형을 사용하지 말고 현재 사용중인 응용 프로그램을 수정하십시오. nvarchar (최대), varchar (최대)varbinary (최대)을 대신 사용하십시오.

+0

완벽한, Zohar 감사합니다! WHERE LIKE를 사용하여 업데이트가 필요한 것뿐만 아니라 &의 모든 인스턴스를 처리하면이를 조정하여 얻을 수있는 효율성이 있습니까? 이 메모 필드에는 수십만 개의 행이 있습니다. 고맙습니다. – Justin

+0

예, 어디서 개선 될 수 있습니다. 나중에 편집 할 것입니다. –

+0

Zohar, 귀하의 의견을 기다려 주셔서 감사합니다. – Justin

2

당신이로 같은 일을 수행 할 수 있습니다

UPDATE STOCKMEM 
SET INETFDESC = CONVERT(NVARCHAR(MAX),(REPLACE(REPLACE(INETFDESC, '&', '&'), '&', '&'))) 
WHERE INETFDESC LIKE '%&%'