SQL OpenQuery 链接服务器 Oracle DateAdd

SQL OpenQuery linked server Oracle DateAdd

我正在编写一个 sql 查询以从我们的一个链接的 oracle 服务器中提取一些数据。

此查询的唯一问题是两个日期添加行(删除了查询运行)但我需要它们的数据。

我收到以下错误: 链接服务器 "MAGINUS" 的 OLE DB 提供程序 "MSDAORA" 返回消息 "ORA-00904: "DATEADD": 无效标识符

任何人都可以为这些规定语法吗?

提前致谢

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)

Dateadd 对 SQL 服务器有效,但是您发送到 Oracle 数据库的查询需要对 oracle 有效。因此,您需要将 dateadd 移到 openquery 之外,并移至 SQL 服务器位:

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)