-1

我在SQL Server 2000(v8.0.760)中創建了一個視圖,該視圖使用外部聯接連接多個表並使用ISNULL,REPLACE和SUBSTRING函數。該視圖在該數據庫上正常工作。數據庫設置爲整理Latin1_General_BIN。鏈接服務器上的子字符串操作的排序規則衝突

然而,當我嘗試通過鏈接服務器來訪問SQL Server 2008 R2的數據庫上的數據,使用相同的排序規則,失敗,出現以下錯誤:

Msg 8180, Level 16, State 1, Line 1
Statement(s) could not be prepared.
Msg 446, Level 16, State 8, Line 1
Cannot resolve collation conflict for substring operation.

我已經試過幾件事,包括設置對我的視圖上的子字段進行排序,設置鏈接的服務器選項排序兼容性= True和排序規則名稱='空白'以及其他。

我可以通過鏈接服務器從其他表/視圖中選擇數據。創建視圖的視圖SQL是:

SELECT 'CRM' AS SYSTEM_SOURCE, 
    ISNULL(F.PARENT_REGION_ID,' ') AS REGION, 
    ISNULL(B.COMPANYID,' ') AS COMPANYID, 
    ISNULL(A.SO_ID,' ') AS SO_ID, 
    ISNULL(L.LINE_NBR,0) AS TIMESHEET_LINE, 
    isnull(H.NOTE_SEQ_NBR,0) AS NOTE_SEQ_NBR, 
    ISNULL(A.SERVICE_ID,' ') AS SERVICE_ID, 
    ISNULL(C.DESCR80,' ') AS DESCR80, 
    ISNULL(A.SO_STATUS,' ') AS SO_STATUS, 
    ISNULL(A.SO_PRIORITY,' ') AS SO_PRIORITY, 
    ISNULL(E.ASSETTAG,' ') AS ASSETTAG, 
    ISNULL(RIGHT(REPLICATE(' ', 18) + LTRIM(E.INST_PROD_ID), 18),' ') AS PRODUCT_ID, 
    ISNULL(G.NAME1,' ') AS NAME1, 
    ISNULL((CONVERT(CHAR(10),A.SO_DATE,121)),'') AS SO_DATE, 
    ISNULL((CONVERT(CHAR(10),A.START_DT,121)),'') AS ACTL_START_DATE, 
    ISNULL((CONVERT(CHAR(10),D.ACT_END_DATE,121)),'') AS ACTL_END_DATE, 
    ISNULL(A.ENS_MTR_TOTAL,0) AS ENS_MTR_TOTAL, 
    ISNULL(K.ENS_MTR_READING,0) AS ENS_MTR_READING, 
    ISNULL(I.ENS_MTR_TOTAL,0) AS ENS_MTR_TOTAL, 
    ISNULL(D.TOTAL_ACT_TIME,0) AS TOTAL_ACT_TIME, 
    ISNULL(A.ENS_IPROD_DWN_TIME,0) AS ENS_IPROD_DWN_TIME, ISNULL(A.ENS_RIG_DWN_TIME,0) AS ENS_RIG_DWN_TIME, 
    ISNULL(J.MODEL_NBR,' ') AS MODEL_NBR, ISNULL(J.PROD_BRAND,' ') AS PROD_BRAND, 
    ISNULL((CONVERT(CHAR(10),E.INSTALLED_DATE,121)),'') AS INSTALLED_DATE, 
    ISNULL(L.PERSON_ID, ' ') AS PERSON_ID, 
    ISNULL(L.DTL_TOTAL, 0) AS DTL_TOTAL, 
    ISNULL(SUBSTRING(D.ENS_PROBLEM_CD, 1, 15),' ') as PROBLEM_CD, 
    ISNULL(SUBSTRING(D.ENS_PRDCOMP_ID, 1, 15),' ') as PROBLEM_ID, 
    CASE 
    WHEN L.PERSON_ID = NULL THEN ' ' 
    ELSE ISNULL((SELECT M.NAME FROM PS_RD_PERSON_NAME M WHERE M.PERSON_ID = L.PERSON_ID), ' ') END AS NAME, 
    (CONVERT(CHAR(10),SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10),121)) AS CUR_DATE, 
    ISNULL(REPLACE(H.SUMMARY_RF,'|',''),' ') AS NOTE_SUBJECT , 
    ISNULL(REPLACE(REPLACE(REPLACE(CAST(H.DESCRLONG AS CHAR(8000)), CHAR(10),' '), CHAR(13), ' '),'|', ''),' ') AS NOTE_DETAIL 
    FROM PS_RF_SO_HDR A 
    , PS_RD_COMPANY B 
    , PS_RF_SERVICE C 
    , PS_RF_SO_LINE D 
    , PS_RB_REGION F 
    , PS_RF_PROVIDER_GRP G 
    , PS_RF_INST_PROD E 
    , PS_RF_SO_NOTE H 
    , PS_ENS_MTR_INST_PR I 
    , PS_PROD_ITEM J 
    , PS_ENS_MTR_SO_HDR K 
    , PS_RF_TIME_LINE L 
    WHERE A.BO_ID_CUST = B.BO_ID 
    AND C.SERVICE_ID = A.SERVICE_ID 
    AND A.BUSINESS_UNIT = D.BUSINESS_UNIT 
    AND A.SO_ID = D.SO_ID 
    AND B.COMPANYID *= F.REGION_ID 
    AND A.PROVIDER_GRP_ID *=G.PROVIDER_GRP_ID 
    AND A.INST_PROD_ID *= E.INST_PROD_ID 
    AND A.SO_ID *=H.SO_ID --AND 1 = '1' 
    AND A.INST_PROD_ID *= I.INST_PROD_ID 
    AND A.CUST_SETID *= J.SETID 
    AND A.PRODUCT_ID *= J.PRODUCT_ID 
    AND A.BUSINESS_UNIT = K.BUSINESS_UNIT 
    AND A.SO_ID = K.SO_ID 
    AND D.BUSINESS_UNIT *= L.BUSINESS_UNIT 
    AND D.TIME_SHEET_ID *= L.TIME_SHEET_ID 
+0

真的...這是你所提供的? – user2868655

回答

0

「花費一些努力來減少您的查詢」?

對不起,您確實沒有認識到我們不知道該查詢的功能要求是什麼的事實。單獨的功能需求決定了開發工作,也就是說,除非你說他寫SQL的技能不足。有趣的是,你沒有提供任何真正有建設性的批評,表明你比他更瞭解這種情況,也沒有完成他的SQL所需的代碼。沒有魔法彈可以解決他的問題。相反,你侮辱他的專業知識。

但是等等,你不知道功能需求,對嗎?

也許當你真的可以提供一些有用的迴應時,它會更受歡迎。與此同時,在你的腰帶下幾年,大三。當您真正與開發人員處理數百萬行企業級企業數據庫時,請回到我身邊。比我敢肯定,你將不會像上面提供的那樣,用這樣一個晦澀的答案來批評。

此致,

弗林金凱德

相關問題