2017-12-11 10 views
1

연결된 서버에 제출할 SQL 문을 작성해야합니다. 명령문은 @parameters와 인용문을 포함하는 case 문을 사용합니다.링크 된 서버에 전달할 SQL 문자열의 인용 부호 이해에 도움이 필요합니다.

이 Microsoft 문서 'How to pass a variable'이 이상적으로 보였지만 모든 것을 해결할 수는 없습니다. 링크 된 서버가 Sp_executesql을 호출하는 최종 제안에 대해서는 사용할 수 없으므로 처음 두 예제를 시도해 보았습니다.

DECLARE @TSQL NVARCHAR(4000), @PARM NVARCHAR(10) 
SET @PARM = 'ABC' 
SET @TSQL = 'SELECT * FROM OPENQUERY(MYLINKEDSERVER, '' 
SELECT * 
FROM MYTABLE 
WHERE FLDA = '''''[email protected]+''''''')' 
EXEC (@TSQL) 
: 나는 CASE 문을 제외 할 때 작동하도록 쿼리를 얻을 수

SELECT *, 
CASE WHEN FLDA = 'ABC' THEN 'DEF' ELSE 'ABC' END AS COL1 
FROM MYTABLE 
WHERE FLDB = @PARM 

1 : 시작하기

, 여기에 자체 내 SQL 문을 줄이려고 예입니다

그러나 @PARM 앞에 5 개의 따옴표가 필요하고 그 다음에 7 (!)이 필요한 이유를 이해하지 못합니까? 이전 언어의 문자열에서 SQL 문을 코딩 할 때 2 인용만으로도 하나의 단일 인용 부호로 작동했습니다. 그럼 왜 5와 7입니까?

2 나는 CASE 문을 추가하려고 할 때 SQL이 전혀 작동하지 않습니다. 2,3,4 인용의 모든 조합을 시도했지만 아무 소용이 없습니다. 다시 개방 견적을 특정 양과 닫는 견적을 다른 양으로 다시 사용해야합니까?

DECLARE @TSQL NVARCHAR(4000), @PARM NVARCHAR(10) 
SET @PARM = 'ABC' 
SET @TSQL = 'SELECT * FROM OPENQUERY(MYLINKEDSERVER, '' 
SELECT *, 
CASE WHEN FLDA = ''ABC'' THEN ''DEF'' ELSE ''ABC'' END AS COL1 
FROM MYTABLE 
WHERE FLDA = '''''[email protected]+''''''')' 
EXEC (@TSQL) 

대단히 감사합니다!

건배

마크

+0

_ "SQL을 작동시킬 수 없습니다"_ 왜 안 되니? 어떤 오류가 발생합니까?어쨌든 이것을 해결하는 가장 좋은 방법은 올바른 결과를 볼 때까지 변수의 문자열을 구성하고 그 변수를'print'하고 동적 SQL 명령에 넣는 것에 대해 걱정하는 것입니다. –

+0

"SQL을 작동시킬 수 없다"는 것은 무엇을 의미합니까? 추락했다 ??? 결과가 없다??? 잘못된 결과 ??? 아무도 모른다. 우리가 무엇이 잘못되었는지를 모른다면, 어떻게 당신을 도울 수 있습니까 ??? – Eric

+0

가장 간단한 디버깅은'PRINT @ TSQL'과'--EXEC @ TSQL'을 주석 처리하는 것입니다. 당신이 얻는 것을보십시오. – Eric

답변

0

내 첫 번째 질문 왜 내가 5, 7 따옴표가 필요하므로이 오류 메시지가 없었다,하지만 난 내가 본 몇 가지 오류를 나열했습니다 수있는 포인트를받을 수 있나요 내가 따옴표가 틀렸을 때.

그러나 팁을 사용하는 것은 매우 유용했기 때문에 모두에게 감사드립니다!

따라서 인용구가 필요한 곳에 실제로는 한 쌍의 인용문이 필요합니다. 그러나 문자열 내에서 SQL 문자열을 만들 때이 문자열을 다시 두 번 사용해야합니다. 그래서 먼저 문자열을 작은 따옴표로 끝내고 4 따옴표를 추가하여 변수를 처리하는 데 필요한 큰 따옴표를 작성해야합니다. 따라서 마찬가지로 변수를 따옴표 쌍을 얻기 위해 4 개의 따옴표가 필요합니다. 명령문을 끝내기 위해 따옴표를 붙인 다음 OPENQUERY 명령의 끝 괄호를 감싸기 위해 마지막 것을 마무리해야합니다.

그래서 :

WHERE FLDA = '''''[email protected]+''''''')' 

로 인쇄 :

CASE WHEN FLDA = ''''ABC'''' THEN ''''DEF'''' ELSE ''''ABC'''' END AS COL1 

:

WHERE FLDA = ''ABC''') 

그리고 내 CASE 문에 대해, 나는 그래서 2로 동일시, 따옴표의 4 세트를 필요 다음 형식으로 인쇄 :

CASE WHEN FLDA = ''ABC'' THEN ''DEF'' ELSE ''ABC'' END AS COL1