2015-01-28 5 views
1

Я связал Oracle Server с моим SQLServer.while обрамляя запрос конкатенации, я сталкиваюсь с проблемой. Пожалуйста, проверьте код ниже.string concatenation in openquery

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

Ошибка Msg:

Msg 7357, уровень 16, состояние 2, строка 1 Не удается обработать объект «выберите CONCAT (CUST_ADD1, '', '', CUST_ADD2, '',» ', CUST_ADD3) от TDSPARTY, где CUST_NAME =' DR GEORGE ABRAHAM '". Поставщик OLE DB «MSDASQL» для связанного сервера «OracleConnection» указывает, что либо у объекта есть нет столбцов, либо у текущего пользователя нет разрешений на этот объект . требуется

Выход: CUST_ADD1,CUST_ADD2,CUST_ADD3

ответ

0

Версия Oracle для функции CONCAT() допускает использование только двух аргументов. Таким образом, вы можете использовать вложенные CONCAT() S:

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

или вы можете использовать оператор конкатенации || (который фактически определен в стандарте ANSI SQL, хотя SQL Server не соответствует этому стандарту):

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

Я предполагаю, что дополнительные одиночные кавычки ' - это то, что вы их избегаете.

+0

Я не думаю, что OP пытается избежать одиночных кавычек. Он просто пытается связать три значения столбца. –

+0

Он убегает от них. B/c сам запрос передается как строка в функцию 'openquery()'. –

+0

И почему вы включили двойные кавычки? Все, что вам нужно, это совместить значения столбцов вместе с запятой между ними. Я что-то упускаю? –

1

Просто используйте concatenation operator ||

что-то вроде -

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

Дополнительная информация:

CONCAT функция позволяет соединить две строки вместе. Для более чем двух строк вы можете использовать MULTIPLE concat вместе. Однако, чтобы это было просто, вы могли бы пойти с оператором конкатенации, как показано выше.