2015-01-28 17 views
1

SQL Server에 링크 된 Oracle 서버. 연결 쿼리 프레이밍 중 문제가 발생했습니다. 아래 코드를 확인하십시오.오픈 쿼리의 문자열 연결

select * from openquery(OracleConnection,'select CONCAT(CUST_ADD1,'','',CUST_ADD2,'','',CUST_ADD3) from TDSPARTY where CUST_NAME=''DR GEORGE ABRAHAM''') 

오류 메시지 :

7357 메시지, 수준 16, 상태 2, 줄 1 개체 "를 선택 CONCAT (CUST_ADD1, '', '', CUST_ADD2 '를 처리 할 수 ​​없습니다', ' ', CUST_ADD3) TDSPARTY에서 CUST_NAME ='DR GEORGE ABRAHAM ' ". 연결된 서버 "OracleConnection"에 대한 OLE DB 공급자 "MSDASQL"은 개체에 열이 없거나 현재 사용자에게 해당 개체에 대한 사용 권한이 없음을 나타냅니다.

출력이 필요합니다 : CUST_ADD1,CUST_ADD2,CUST_ADD3

답변

0

오라클 버전의 CONCAT() 함수는 두 개의 인수 만 허용합니다. 그래서 당신은 중첩 된 CONCAT()의 사용 할 수 있습니다 :

CONCAT(CONCAT(CONCAT(CONCAT(CUST_ADD1,'',''),CUST_ADD2),'',''),CUST_ADD3) 

또는 (SQL Server가이 표준을 준수하지 않지만, 실제로 ANSI SQL 표준에 정의되어 있습니다) 당신은 연결 연산자 ||를 사용할 수 있습니다

CUST_ADD1||'',''||CUST_ADD2||'',''||CUST_ADD3 

당신이 그들을 탈출하기 때문에 나는 여분의 작은 따옴표 '을 사용한다고 가정합니다.

+0

나는 OP가 작은 따옴표를 벗어나려고하지 않는다고 생각합니다. 그는 단지 세 개의 컬럼 값을 연결하는 데 어려움을 겪고 있습니다. –

+0

그는 자신을 이스케이프 처리하고 있습니다. 쿼리 자체는 문자열로서'openquery()'함수에 전달됩니다. –

+0

그리고 왜 큰 따옴표를 포함 시켰습니까? 필요한 것은 쉼표와 함께 열 값을 연결하는 것입니다. 내가 놓친 게 있니? –

1

는 단순히 concatenation operator를 사용 || 같은

일 -

select CUST_ADD1||','||CUST_ADD2||','||CUST_ADD3 from...

추가 정보는 :

CONCAT 기능을 사용하면 두 개의 문자열을 연결할 수 있습니다. 세 개 이상의 문자열의 경우 다중 concat를 함께 중첩 할 수 있습니다. 그러나 간단하게 유지하려면 위와 같이 연결 연산자를 사용할 수 있습니다.