[英]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
要記住的要點:
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.