簡體   English   中英

排序規則問題 - SQL Server 2005

[英]Collation Problem - SQL Server 2005

我想了解我在SQL Server 2005實例上遇到的這個錯誤。 錯誤如下:

無法在等於操作中解決“Latin1_General_CI_AI”和“SQL_Latin1_General_CP1_CI_AI”之間的排序規則沖突。

簡單查詢中包含的兩個數據庫都具有Latin1 General CI AI ,但之前具有SQL Latin1 General CP1 CI AI 我更改了整理以嘗試匹配它們但每次我嘗試使用來自用戶數據庫的表連接臨時表時仍然會得到上述錯誤。 我沒有創建臨時表的問題。

當您加入時,您可以使用COLLATE動態更改排序規則以使它們相同:

select c.name, o.orderid from customer as c
inner join order as o on c.custid = o.custid COLLATE SQL_Latin1_General_CP1_CI_AI

假設cust是SQL_Latin1_General_CP1_CI_AI並且order是其他一些排序規則,上面的查詢將解決問題。

在表格設計中查看您進行連接的兩個字段具有相同的排序規則設置。

ALTER TABLE <table>
ALTER COLUMN <column> VARCHAR(200) COLLATE Latin1_General_CI_AI
GO

如果您創建一個臨時表,並且您的數據庫具有除TempDB之外的其他排序規則(與系統具有相同的排序規則 - 基於安裝),則比較/查找/連接可能會出現問題。 解決這個問題的一個簡單方法是使用database_default:

CREATE TABLE #test2
(
   col1 varchar(12) COLLATE database_default
)
go

回覆。 更改數據庫排序和處理TempDB對象

更改數據庫的歸類順序后,您是否重建了所有索引?

在具有不同排序規則的服務器之間移動數據庫時,我遇到了非常類似的問題。 數據庫遇到了它的原始排序規則,但由於新服務器的排序規則(以及tempdb數據庫的排序規則)不同,因此在創建臨時表並嘗試加入時會導致問題。

如果您說您的數據庫的排序規則與服務器的排序規則相同,那么我猜您必須使用一些使用不同排序規則的列。 (您可以逐列更改排序規則)。

無論如何,我總是通過在恢復它之后更改整個數據庫的整理以匹配目標服務器來處理這些問題。 這是PITA手動完成的,但幸運的是有一個工具可以做到。

根據我的記憶,如果您使用的是內存中的tempDb,它會根據需要重新創建。 因此,如果您的Model數據庫具有不同的排序規則,則新創建的db(如tempDb)將從Model繼承它。

暫無
暫無

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

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