2011-10-24 43 views
0

我的應用程序的數據庫mydb具有與tempdb不同的排序規則。我比較了tempdb臨時表和mydb持久表之間的字符串值的異常情況。 決定創建與tempdb具有相同排序規則的mydb。 排序規則必須使用腳本自動設置。我試過這個:自動設置排序規則

DECLARE @SQLCollation sql_variant 
SELECT @SQLCollation = DATABASEPROPERTYEX('tempdb', 'Collation') 
ALTER DATABASE mydb COLLATE @SQLCollation -- doesn't work 
ALTER DATABASE mydb COLLATE Latin1_General_CI_AS -- works, but doesn't suit me because I have to type in collation myself in this SQL 

那麼如何設置mydb和tempdb相同的排序規則?

回答

0
DECLARE @SQLCollation NVARCHAR(1000) 
SELECT @SQLCollation = 'ALTER DATABASE MyDb COLLATE '+CAST(DATABASEPROPERTYEX('Tempdb', 'Collation') as NVARCHAR(1000)) 
exec (@sqlcollation) 
+3

這隻會更改系統表。不是用戶表 – gbn

2

更改db的排序規則不會更改db中已有表的排序規則。

另一種選擇是指定在創建臨時表時使用的排序規則。然後

create table #TempTable 
(
    Name varchar(10) collate database_default 
) 

你比較會工作得很好asuming你的所有表字符型字段具有相同的排序規則的數據庫。

+0

是的,我知道 –

3

您不能只更改DB排序規則與ALTER DATABASE。這隻會改變系統數據庫(對象名稱等)。 (Dalex的回答)

你必須按照對Changing SQL Server Database sorting的答案中詳細的步驟。

使用COLLATE Database_Default強制排序而不知道它是什麼的另一種選擇。請參見SQL Server error "Implicit conversion of because the collation of the value is unresolved due to a collation conflict."SQL Server - is there a way to mass resolve collation conflicts