【问题标题】:getdate() on linked server gives me an error链接服务器上的 getdate() 给我一个错误
【发布时间】:2017-03-20 15:13:18
【问题描述】:

我有以下 TSQl 语句,它使用链接服务器从 sage 检索销售订单,但我不明白为什么这行 JrnlHdr.TransactionDate = cast(GETDATE()) 会给我任何错误。我可以在没有JrnlHdr.TransactionDate = cast(GETDATE()) 的情况下检索所有记录,但我只想查看今天创建的销售订单。

这里是选择语句

SELECT * FROM OPENQUERY([SAGE],'SELECT DISTINCT Customers.CustomerID, Customers.Customer_Bill_Name, Customers.WhichShipVia, 
LineItem.ItemID as I, JrnlHdr.INV_POSOOrderNumber, JrnlHdr.CustomerInvoiceNo, 
JrnlHdr.Comment2, JrnlHdr.ShipByDate, JrnlHdr.GoodThruDate, JrnlHdr.CustomerSONo, JrnlHdr.Reference, JrnlHdr.TransactionDate,
JrnlRow.DistNumber, CAST (JrnlRow.Quantity AS NUMERIC (20,4)), LineItem.ItemID, LineItem.SalesDescription, LineItem.PartNumber, LineItem.Category, LineItem.ItemClass, LineItem.ItemDescription 
FROM   Customers
INNER JOIN JrnlHdr
ON Customers.CustomerRecordNumber = JrnlHdr.CustVendId
LEFT OUTER JOIN Address
ON Customers.CustomerRecordNumber = Address.CustomerRecordNumber
INNER JOIN JrnlRow
ON JrnlHdr.PostOrder = JrnlRow.PostOrder
INNER JOIN LineItem 
ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
WHERE  JrnlHdr.JrnlKey_Journal = 11 AND JrnlHdr.TransactionDate = cast(GETDATE()) AND JrnlHdr.PostOrder = JrnlRow.PostOrder  AND JrnlHdr.CustVendId = Customers.CustomerRecordNumber AND JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber AND JrnlHdr.POSOisClosed = 0')

这是我收到的错误消息

用于链接服务器“SAGE”的 OLE DB 提供程序“PervasiveOLEDB.11.0” 返回消息“处理过程中出现一个或多个错误 命令。”。用于链接服务器的 OLE DB 提供程序“PervasiveOLEDB.11.0” “SAGE”返回消息“[Pervasive][ODBC 引擎接口]语法 错误:N JrnlHdr.PostOrder = JrnlRow.PostOrder INNER JOIN LineItem ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber WHERE JrnlHdr.JrnlKey_Journal = 11 和 JrnlHdr.TransactionDate = cast(GETDATE()

【问题讨论】:

    标签: sql-server tsql join getdate


    【解决方案1】:

    由于您显然是在远程 Pervasive 数据库上执行查询,因此您需要使用该 DBMS 的语法,即 CURDATE() 而不是 GETDATE()

    【讨论】:

    • Pervasive DB / PSQL 上的好地方 :-) 使我的答案无效!
    【解决方案2】:

    你可以试试这个吗?

    SELECT * FROM OPENQUERY([SAGE],'SELECT DISTINCT Customers.CustomerID, Customers.Customer_Bill_Name, Customers.WhichShipVia, 
    LineItem.ItemID as I, JrnlHdr.INV_POSOOrderNumber, JrnlHdr.CustomerInvoiceNo, 
    JrnlHdr.Comment2, JrnlHdr.ShipByDate, JrnlHdr.GoodThruDate, JrnlHdr.CustomerSONo, JrnlHdr.Reference, JrnlHdr.TransactionDate,
    JrnlRow.DistNumber, CAST (JrnlRow.Quantity AS NUMERIC (20,4)), LineItem.ItemID, LineItem.SalesDescription, LineItem.PartNumber, LineItem.Category, LineItem.ItemClass, LineItem.ItemDescription 
    FROM   Customers
    INNER JOIN JrnlHdr
    ON Customers.CustomerRecordNumber = JrnlHdr.CustVendId
    LEFT OUTER JOIN Address
    ON Customers.CustomerRecordNumber = Address.CustomerRecordNumber
    INNER JOIN JrnlRow
    ON JrnlHdr.PostOrder = JrnlRow.PostOrder
    INNER JOIN LineItem 
    ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
    WHERE  JrnlHdr.JrnlKey_Journal = 11 AND JrnlHdr.TransactionDate = cast(CURDATE()) AND JrnlHdr.PostOrder = JrnlRow.PostOrder  AND JrnlHdr.CustVendId = Customers.CustomerRecordNumber AND JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber AND JrnlHdr.POSOisClosed = 0')
    

    【讨论】:

    • 感谢 Raghu 我收到错误 OLE DB provider "PervasiveOLEDB.11.0" for linked server "SAGE" returned message "One or more errors occurred during processing of command.". OLE DB provider "PervasiveOLEDB.11.0" for linked server "SAGE" returned message "[Pervasive][ODBC Engine Interface]Syntax Error: N JrnlHdr.PostOrder = JrnlRow.PostOrder INNER JOIN LineItem ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber WHERE JrnlHdr.JrnlKey_Journal = 11 AND JrnlHdr.TransactionDate = cast(CURDATE()<< ??? ".
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多