茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671761 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_0180.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2022/11/30 3:25:30

解決資料庫查詢時定序衝突

跨兩個不同 SQL Server 資料庫執行查詢指令,出現錯誤訊息如下

無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Latin1_General_100_CI_AS" 之間的定序衝突。

發生原因

當查詢兩個以上不同的資料庫,當兩者定序不一致時 Join 查詢資料則會發生這項錯誤。

SQL Server 中定序是在建立資料庫時決定,所有資料表、欄位的定序會參照資料庫的設定。

可以針對單一資料表或欄位調整定序,不過遇到不同定序的欄位比對則需要先轉換為一致的定序。

 

解決方法

查詢時將外點資料欄位定序轉換跟本地資料庫端的定序一致,轉換指令: collate,參閱 COLLATE (Transact-SQL) 

1. 查詢時轉換定序

串接的欄位時指定轉換的定序,將原本查詢與法修改如下:

SELECT*
FROM DB1.dbo.table1 A, DB2.dbo.table2 B 
WHERE A.PK1 = (B.PK1 collate Latin1_General_100_CI_AS)

 

2. 修改 View 結構

上述的作法,必須在每次串聯查詢都做一次轉換。

若使用頻繁,可以另外建立一個 View,針對會 Join 的欄位先設定好定序,在爾後查詢就不用逐一轉換。

以下範例僅針對其中一個欄位設定轉換定序,設定愈多欄位是會影響效能,需斟酌設地。參考語法如下:

CREATE VIEW [dbo].[viewTable2]
AS
SELECT
(PK1  collate Latin1_General_100_CI_AS) AS PK1
, COL2
, COL3
, …
FROM DB2.dbo.table2 B

GO

建立好 View 後,原本的查詢可以直接串聯

SELECT*
FROM DB1.dbo.table1 A, viewTable2 B 
WHERE A.PK1 = B.PK1

 

延伸閱讀

[SQL Server]談談SQL Server的定序(Collation) – from gipi


原文出處: 解決資料庫查詢時定序衝突
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|