1

照合が異なる別のサーバーでDBを作成してから、新しい照合を使用して新しいサーバーに移行したため、問題が発生し続け、古い照合のすべての値を変更することにしました。 。

だから私はこのクエリを実行しようとしました:

sp_configure "Allow Updates", 1
GO
RECONFIGURE WITH OVERRIDE
GO

UPDATE sys.columns SET collation_name = 
    'SQL_Latin1_General_CP1_CI_AS' WHERE collation_name = 'Hebrew_CI_AS'
GO

sp_configure "Allow Updates", 0
GO
RECONFIGURE
GO

ただし、クエリの出力は次のとおりです。

Configuration option 'allow updates' changed from 0 to 1. 
    Run the RECONFIGURE statement to install.

Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.

Configuration option 'allow updates' changed from 1 to 0. 
    Run the RECONFIGURE statement to install.

更新
以下の回答によると、私はアクションを実行するための自動化された方法を探しています。

4

3 に答える 3

4

特定の列の照合を変更するには、ALTERTABLEコマンドを発行する必要があります。

例えば

ALTER TABLE YourTable 
ALTER COLUMN ColA VARCHAR(10) COLLATE Latin1_General_CI_AS NOT NULL

このMSDNリファレンスを確認してください

于 2010-10-25T20:13:24.150 に答える
2

Hebrew_CI_ASこのクエリは、照合されたすべての列をLatin1_General_CI_AS照合にスワップするスクリプトを生成します。

DECLARE @Script varchar(MAX)
SET @Script = CAST((
SELECT 'ALTER TABLE [' + Tables.Name + '] ALTER COLUMN [' + 
  [Columns].Name + '] ' + Types.Name + '(' + 
  CAST([Columns].max_length AS varchar) + ') COLLATE Latin1_General_CI_AS ' + 
  CASE WHEN [Columns].is_nullable = 0 THEN 'NOT ' ELSE '' END + 'NULL '
FROM sys.tables Tables INNER JOIN sys.all_columns [Columns]
  ON [Tables].[object_id] = [Columns].[object_id]
  INNER JOIN sys.types Types ON [Columns].system_type_id = Types.system_type_id
WHERE [Columns].collation_name = 'Hebrew_CI_AS'
FOR XML PATH('')
) AS varchar(MAX))

PRINT @Script
EXEC(@Script)

注:インデックス付け/制約されている列の場合、手動で編集する必要がありますが、上記のクエリを実行すると、エラー結果(制約などの場合)にテーブルと列の名前が含まれているため、それがまだ残っていることを認める必要があります。すべてを手動で行うよりも優れています。

于 2010-10-25T22:35:50.140 に答える
2

alter table各列の照合を変更するために使用できます。

データベース照合を変更する唯一の方法は、データベースを削除して再作成することです。

于 2010-10-25T20:12:07.163 に答える