sys.columns を更新できません - 他の方法はありますか?
-
26-09-2019 - |
質問
異なる照合順序を持つ別のサーバー上に 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
各列の照合順序を変更します。
データベースの照合順序を変更する唯一の方法は、データベースを削除して再作成することです。
所属していません StackOverflow