지금은 쿼리를 실행하여 문서의 동적 단어를 찾아 링크로 바꿉니다. 그것은 잘 작동하지만 일부 특수 문자가있는 경우 null
을 반환합니다. 동적 단어가 여기에 ampersand '&'
동적 SQL 쿼리 및 특수 문자 문제
들어있는 내용의 일부와 현재 내가 문제가 오전 : 그것은 NULL
아래 'Cease & Desist'
에 대한 반환
<p>STEPS:</p>
<p>
<p>Please refer to <|Cease & Desist|> policy.</p>
내가 사용하고있는 코드가, 무엇을 앰퍼샌드가 포함되어 있어도 전체 동적 단어를 반환해야합니다. 위의 질의 가장 안쪽 쿼리 query 'a'
InnerText column name [text]
동적 단어를 포함하고 무엇에
SET NOCOUNT ON;
DECLARE @MyTable TABLE
(
ID INT IDENTITY(1,1) PRIMARY KEY,
PolicyName NVARCHAR(200) NULL,
DocumentID int not null,
OldContent NVARCHAR(MAX) NOT NULL,
NewContent NVARCHAR(MAX) NULL
);
INSERT INTO @MyTable (documentid,OldContent)
select documentid, html from IPACS_Document where PATINDEX('%Please refer to <|%', html) > 0 and PATINDEX('%|> Policy%', html) > 0 and documentid = 147;
--select html, PATINDEX('%Please refer to <|%', html), PATINDEX('%|> Policy%', html) from IPACS_Document where PATINDEX('%Please refer to <|%', html) > 0;
WITH UpdateCTE
AS
(
SELECT b.PolicyName, b.[text], b.NewContent,STUFF(b.InnerText,b.StartIndex-5,b.EndIndex-b.StartIndex+10,'<a href="~/Document/Details/'+ CAST(d.[documentid] as VARCHAR(200))+'">'+b.[Text]+'</a>') AS ChangedText
FROM
(
SELECT a.*,SUBSTRING(a.InnerText,a.StartIndex,a.EndIndex-a.StartIndex) AS [Text]
FROM
(
SELECT PATINDEX('%Please refer to <|%',t.OldContent)+21 AS StartIndex,
PATINDEX('%|> Policy%',t.OldContent) AS EndIndex,
t.OldContent AS InnerText,
t.NewContent,
t.PolicyName
FROM @MyTable t
) a
) b
inner join IPACS_Document d on d.filename like '%' + b.[text] + '%'
where d.categoryid = 3
)
--select * from UpdateCTE
UPDATE UpdateCTE
SET NewContent = ChangedText, PolicyName = [text];
SELECT *
FROM @MyTable x;
. 이것은 table 'b'
으로 [text]
으로 전달됩니다. 결국 @Mytable
에서 동적 단어는 PolicyName
에 입력됩니다.
동적 단어에 앰퍼샌드 또는 특수 문자가 포함 된 경우 어떻게 작동합니까?
하여 입력 HTML을 XHTML을 준수하는 경우, 당신은 XML로 임시 테이블에 삽입 고려하고 XQuery를 사용할 수 있습니다. PATINDEX 비교가 xpath로 변경되고 특수 문자가 처리됩니다. – Jim
@ 짐 슬프게도 아니다. 온라인 XHTML 직접 입력에서이를 테스트하면 150 개 이상의 오류가 발생합니다. 그것은 변환 된 단어 문서에서 파생 된 html입니다. 다른 방법이 있기를 바래요? –