연결된 서버에 제출할 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)
대단히 감사합니다!
건배
마크
_ "SQL을 작동시킬 수 없습니다"_ 왜 안 되니? 어떤 오류가 발생합니까?어쨌든 이것을 해결하는 가장 좋은 방법은 올바른 결과를 볼 때까지 변수의 문자열을 구성하고 그 변수를'print'하고 동적 SQL 명령에 넣는 것에 대해 걱정하는 것입니다. –
"SQL을 작동시킬 수 없다"는 것은 무엇을 의미합니까? 추락했다 ??? 결과가 없다??? 잘못된 결과 ??? 아무도 모른다. 우리가 무엇이 잘못되었는지를 모른다면, 어떻게 당신을 도울 수 있습니까 ??? – Eric
가장 간단한 디버깅은'PRINT @ TSQL'과'--EXEC @ TSQL'을 주석 처리하는 것입니다. 당신이 얻는 것을보십시오. – Eric