質問

異なる照合順序を持つ別のサーバー上に 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.

アップデート
以下の回答によると、アクションを自動的に実行する方法を探しているだけです。

役に立ちましたか?

解決 3

このクエリは、すべてを交換するスクリプトを生成します。 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)

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

他のヒント

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

例えば

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

チェックアウト この MSDN リファレンス

使用できます alter table 各列の照合順序を変更します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top