あなたがバックアップ後に発生し、SQL Serverの矛盾の照合を復元することがあり、今回は統一照合することによって解決することができます。次のように詳細な動作は以下のとおりです。
データベースエラーメッセージ: 「順序SQL_Latin1_General_CP1_CI_AS」と「Chinese_PRC_CI_AS」の間の照合順序の競合での動作に等しい解決することができません。
:競合照合を解決するために、照合を直接次のようにクエリミスを回避することができ、一致するフィールドに応じて変化させることができる ALTER TABLE [表]のALTER COLUMN [フィールド名]のnvarchar(256)COLLATE Chinese_PRC_CI_AS '
しかし、多くのデータベースは、「順序SQL_Latin1_General_CP1_CI_AS」フィールドとして注文があり、一つ一つを変更する場合は、数百のワークロードが想像できるのであれば、その後、数十の分野も、考えることができます。我々は現在、以下のように、などに対応するテーブル名、フィールド名、照合、フィールドの種類、ならびに対応する長さを、照会、データベースを変更するために必要な最初のクエリのフィールドを次のことができます。
SELECT t.name [表]と、 [列] AS c.name、 [照合] AS c.collation_name、 [型名]としてTYPE_NAME(c.system_type_id) [TypeLength]とc.max_length sys.columnsがCからの RIGHT JOIN SYS.TABLESトンON c.object_id = t.object_id c.collation_nameがNULLでない場合
上記のステートメントを実行する、あなたはいくつかのより多くの行を見つけることができ、変更の過度の量を手動でゆっくりと変更することは基本的に不可能である、あなたは、SQLクエリの結果を通じて統一変更する必要があります。ブログの友人は公園が一時テーブルを循環させることにより、幹部は次のように各レコードのスプライシング、特定のコードを変更するSQL文を実行し、一時テーブルに結果セットをしますお勧めします。
@table NVARCHAR(128)を宣言-環状アイテムテーブル DECLAREの@Column NVARCHAR(128) -環状項目フィールド名 DECLAREの@type NVARCHAR(128) -対応するフィールドのタイプ、CHAR、NCHAR、VARCHAR、等NVARCHAR DECLARE @ typeLenght NVARCHAR(128) -対応するタイプの長さ、NCHAR、NVARCHAR値が2で除算される必要 DECLAREの@sql NVARCHAR(MAX)を-スプライシング実行するSQLステートメント SET ROWCOUNT 0 SELECT NULL MYKEY、 c.NAME、 t.nameをAS [表]、 c.NAME AS [列]、 AS [照合]、c.collation_name TYPE_NAME(c.system_type_id)AS [型名]、 AS [TypeLength] c.max_length INTOが#TEMP sys.columns C FROM RIGHT SYSをJOINをTは.tables c.object_id = t.object_id ON NOT NULL IS c.collation_name WHERE テストにProductテーブルを- -そしてt.name = 'Product'に 。SETのROWCOUNT 1 。SET UPDATE #TEMP 1 = MYKEY WHILE @@ ROWCOUNT> 0 BEGIN のSET ROWCOUNT 0を 各問い合わせレコードの、対応する変数に割り当てられた最初のは- [@table SELECT =表]、 @Column = [列]、 @Type型名=、 @typeLenght = TypeLength #TEMP FROM WHERE = MYKEY。1 --nchar、NVARCHAR 2要求値に加えて、 CONVERT(INT、@typeLenght)IFザを> 0 AND(@ =タイプ'はnvarchar' @type = OR 'NCHAR') BEGIN SETを@ = typeLenght CONVERT(NVARCHAR(128)、CONVERT(INT、@typeLenght)/ 2) END IF @typeLenght = '-1' BEGIN @ = 'SET typeLenghtを最大" END -スプライシングSQL、グループカテゴリーを避けるために、[]、などとフィールド名をそのテーブル名を注意してください SETする@ SQL =' ALTER TABLEを[ '+ @table +'] ALTER COLUMNの[]を + @Column + ']' + @type + '(' + @typeLenght + ')COLLATE Chinese_PRC_CI_AS' --try执行 BEGIN TRYの EXEC(@sql) ENDのTRYは --Catch查询异常结果 CATCHをBEGIN AS [ASLを@sql SELECT ]、 MSGのAS ERROR_MESSAGE() ENDキャッチ #TEMPをDELETE WHEREにmykey = 1 SET ROWCOUNT 1 のUPDATE #TEMPの SETにmykey = 1つの ENDの SETのROWCOUNT 0 DROPテーブル#TEMP
SQLを実行し、更新エラーは、我々はいくつかのフィールドのほんの一握りを手動で変更する必要があり、これらの変更は、1回の調査によって、その上の1ので、関連する外部キーのほとんどが失敗したとことを見ることができますキャッチクエリ結果がリストに表示されてみてください。この時点で、SQLは自動的に大幅に作業負荷を軽減、フィールドのほとんどを変更します。