簡體   English   中英

查詢不返回相同的結果本地 vs openquery

[英]Query not returning same results local vs openquery

我有一個 Oracle 數據庫鏈接到 SQL 服務器數據庫。

每當我在 Oracle 中執行特定查詢時,我都會得到預期的數據。

我選擇的字段是

SELECT 
J.JOBNUMBER AS JOBNUMBER, 
J.OPENDATE AS OPENDATE, 
S.SERVICEREPORTNUMBER AS SERVICEREPORTNUMBER, 
F.SSO AS SSO, 
S.DATEOFVISIT AS DATEOFVISIT, 
CASE WHEN J.SOURCE='MUST' THEN SRVCD.DACRENR ELSE W.DEBRIEFDATE END as "DEBRIEFDATE", 
J.CLOSEDDATE AS CLOSEDDATE,
INITCAP(HR.COUNTRY_NAME) as "COUNTRY", 
F.NAME AS NAME,
SY.MODALITY AS MODALITY, 
HR.MANAGER_SSOID AS MANAGER_SSOID, 
HR.MANAGER_NAME AS MANAGER_NAME

如果我用 openquery 做同樣的查詢,我在列上得到 null 個值

CASE WHEN J.SOURCE='MUST' THEN SRVCD.DACRENR ELSE W.DEBRIEFDATE END as "DEBRIEFDATE"

在這種情況下,該列包含日期,並且顯示對應於 SRVCD.DACRENR 的日期,而 W.DEBRIEFDATE 日期則沒有。

我不知道為什么我在 Oracle 中正確地看到了這些值,但在 openquery 結果中卻沒有。 我嘗試使用 TO_CHAR 和 TO_DATE 更改值,所有場景我都在 Oracle 中看到值,但在 SQL 服務器中看不到。

您可以嘗試在您的日期轉換為 varchar 以便它匹配相同的數據類型嗎? 或者發布一些示例數據

Convert(varchar(10), your field,105)

不確定如何在 OPENQUERY 中聲明變量。 有一種直接方式,您不使用任何變量來存儲稍后執行的查詢,而間接方式與直接方式相反。 大多數時候,間接方式是獲得預期結果的最佳方式。

首先,您需要聲明一些變量並使用EXEC() function 執行它。讓我們看看它是如何完成的。

DECLARE @ORACLE_ENV nvarchar(20) = 'YOUR_ORACLE_DB_INSTANCE_HERE'
DECLARE @ORACLE_SQL nvarchar(max)


SET @ORACLE_SQL = 'SELECT * FROM OPENQUERY ('+@ORACLE_ENV+',''' +SELECT 
J.JOBNUMBER AS JOBNUMBER, 
J.OPENDATE AS OPENDATE, 
S.SERVICEREPORTNUMBER AS SERVICEREPORTNUMBER, 
F.SSO AS SSO, 
S.DATEOFVISIT AS DATEOFVISIT, 
CASE WHEN J.SOURCE=''MUST'' THEN CONVERT(VARCHAR(15), SRVCD.DACRENR, YOUR_PREFERRED_DATE_FORMAT) ELSE CONVERT(VARCHAR(15), W.DEBRIEFDATE, YOUR_PREFERRED_DATE_FORMAT) END as DEBRIEFDATE, 
J.CLOSEDDATE AS CLOSEDDATE,
INITCAP(HR.COUNTRY_NAME) as COUNTRY, 
F.NAME AS NAME,
SY.MODALITY AS MODALITY, 
HR.MANAGER_SSOID AS MANAGER_SSOID, 
HR.MANAGER_NAME AS MANAGER_NAME + ''')'

EXEC sp_executesql @ORACLE_SQL

要記住的要點:

  • 每次根據值過濾某些內容時,它應該始終在雙引號 ('') 內。
  • SQL 日期和 ORACLE 日期格式不同。 您必須先將其轉換為 varchar。
  • 始終注意您添加的引號。 即使是一個單引號也會使整個 OPENQUERY 查詢變得混亂。
  • 上面的 CONVERT() 具有 YOUR_PREFERRED_DATE_FORMAT,這意味着您必須根據您的要求設置首選日期格式。 這是完整的參考,以防萬一您遇到困難: https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM