2011-10-24 8 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 

私はどのように同じ照合を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

ALTER DATABASEでDB照合を変更することはできません。これは、システムデータベース(オブジェクト名など)を変更するだけです。 (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

関連する問題