2016-09-06 6 views
0

Я пишу sql-запрос, чтобы вытащить некоторые данные с одного из наших связанных серверов oracle.Связанный с SQL OpenQuery сервер Oracle DateAdd

Единственная проблема с этим запросом заключается в том, что две строки добавления даты (с их удалением выполняется запрос), но мне нужны их данные.

Я получаю ошибку ниже: поставщика OLE DB "MSDAORA" для связанного сервера "MAGINUS" возвращенное сообщение «ORA-00904: "DATEADD": недопустимый идентификатор

Можно ли прописать синтаксис для этих

?

заранее спасибо

Will

DECLARE @TSQL VARCHAR(8000) 
    ,@CUSTOMER_ACCOUNT VARCHAR(20) 

SELECT @TSQL1 = ' 
SELECT * FROM OPENQUERY(MAGINUS,'' 
SELECT 
CM.CUSTOMER_ACCOUNT AS "CustomerAccount" 
,CM.CONTACT_NAME  AS "ContactName" 
,CM.MEMBERSHIP_NUMBER AS "MembershipNumber" 
,P.LONG_DESCRIPTION_1 AS "ProductDescription" 
,DATEADD(SECOND, CM.MEMBERSHIP_START_DATE, "19700101") AS  "MembershipStartDate" 
,DATEADD(SECOND, CM.MEMBERSHIP_EXPIRY_DATE, "19700101") AS "MemberhrshipEndDate" 
,SH.ORDER_VALUE AS "Price Paid" 
FROM MAGINUS.CUSTOMER_MEMBERSHIP CM 
INNER JOIN MAGINUS.PRODUCT P 
ON CM.PRODUCT_CODE = P.PRODUCT_CODE 
INNER JOIN MAGINUS.SALES_HEADER SH 
ON CM.CUSTOMER_ACCOUNT = SH.CUSTOMER_ACCOUNT 
AND CM.SALES_DOCUMENT_NUM = SH.SALES_DOCUMENT_NUM 
WHERE CM.CUSTOMER_ACCOUNT = ''''' + @CUSTOMER_ACCOUNT + ''''''')' 
EXEC (@TSQL1) 

ответ

0

Dateadd действительна для SQL Server, но т он запрашивает, что вы отправляете Oracle db, должен быть действительным для oracle. Таким образом, вам нужно переместить dateadd за пределы openquery и в бит SQL Server:

DECLARE @TSQL VARCHAR(8000) 
    ,@CUSTOMER_ACCOUNT VARCHAR(20) 

SELECT @TSQL1 = ' 
SELECT CustomerAccount 
     ,ContactName 
     ,MembershipNumber 
     ,ProductDescription 
     ,DATEADD(SECOND, MembershipStartDate, ''19700101'') AS MembershipStartDate 
     ,DATEADD(SECOND, MemberhrshipEndDate, ''19700101'') AS MemberhrshipEndDate 
     ,Price Paid 
FROM OPENQUERY(MAGINUS,'' 
SELECT 
CM.CUSTOMER_ACCOUNT AS "CustomerAccount" 
,CM.CONTACT_NAME  AS "ContactName" 
,CM.MEMBERSHIP_NUMBER AS "MembershipNumber" 
,P.LONG_DESCRIPTION_1 AS "ProductDescription" 
,CM.MEMBERSHIP_START_DATE AS "MembershipStartDate" 
,CM.MEMBERSHIP_EXPIRY_DATE AS "MemberhrshipEndDate" 
,SH.ORDER_VALUE AS "Price Paid" 
FROM MAGINUS.CUSTOMER_MEMBERSHIP CM 
INNER JOIN MAGINUS.PRODUCT P 
ON CM.PRODUCT_CODE = P.PRODUCT_CODE 
INNER JOIN MAGINUS.SALES_HEADER SH 
ON CM.CUSTOMER_ACCOUNT = SH.CUSTOMER_ACCOUNT 
AND CM.SALES_DOCUMENT_NUM = SH.SALES_DOCUMENT_NUM 
WHERE CM.CUSTOMER_ACCOUNT = ''''' + @CUSTOMER_ACCOUNT + ''''''')' 
EXEC (@TSQL1) 
+0

Это не получается более совершенным. – Will