2010-10-05 81 views
23

我得到這個錯誤,同時開發存儲過程SQL Server錯誤「隱式轉換,因爲排序規則衝突造成值的排序規則未解決。」

VARCHAR值到VARCHAR的隱式轉換無法執行,因爲該值的排序規則是未解決由於排序規則衝突。

說法是這樣的

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2 

但如果如果做到這一點也得到同樣的錯誤

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2 

其實這個代碼是由另外一個人寫的和我只是編輯代碼,不知道他爲什麼加入COLLATE DATABASE_DEFAULT,但如果我刪除它也會給出相同的錯誤

無法執行varchar值到varchar的隱式轉換,因爲由於排序規則衝突導致值的排序規則未解決。

回答

46

在兩個地方最有可能需要COLLATE。

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1 
UNION ALL 
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2 

編輯:您可能需要在每一個字符串,如果你在一個地方

Select 
    City COLLATE DATABASE_DEFAULT AS Place, 
    State COLLATE DATABASE_DEFAULT AS State, 
    Country COLLATE DATABASE_DEFAULT AS Country 
FROM DEPT1 
UNION ALL 
Select 
    '' COLLATE DATABASE_DEFAULT, 
    'Arizona' COLLATE DATABASE_DEFAULT , 
    Country COLLATE DATABASE_DEFAULT 
FROM DEPT2 

EDIT2得到它:

這是因爲你的列排序規則可能是你的數據庫歸類不同。所以「城市」有一個整理,但字符串常量有另一個。

+0

是...但它也給了同樣的錯誤 – Azhar 2010-10-05 07:58:02

+1

如何我都從我的聲明刪除此COLLATE DATABASE_DEFAULT ......爲什麼是否強制使用這...實際上有一個聲明有45列和關於工會所有的6個聲明,多於一半是字符串... – Azhar 2010-10-05 08:13:25

+0

這是一個很好的技巧,當我正在處理選擇從幾個SYS表(或視圖)來找出什麼權限授予我所有的服務器登錄(委託人)被給予。 – NateJ 2016-03-03 01:04:38

1

ALTER TABLE DEPT1和DEPT2使表導致定義不包含任何COLLATE

相關問題