2016-12-12 7 views
0

データベースの照合順序がFrench_CI_ASに設定され、FirstNameの列照合順序がdatabase_defaultに設定されたEmployees表があるとします。あなたはLatin1_General_CI_AIに照合順序を変更するには、次のコードを実行した場合sys.columnsはまだあなたは数秒後に同じコードを実行した場合、sys.columnsは最終的に更新されますFrench_CI_ASdb照合変更後のSYS.columnsのリフレッシュ

ALTER DATABASE MyDB COLLATE Latin1_General_CI_AI; 

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS DatabaseCollation 
--Return Latin1_General_CI_AI 

SELECT collation_name AS FieldCollation 
FROM sys.columns 
WHERE OBJECT_ID IN(SELECT object_id FROM sys.objects WHERE type = 'U' AND NAME = 'Employees') 
AND NAME = 'FirstName'; 
--return French_CI_AS 

を返します。一方で、DATABASEPROPERTYEX機能はLatin1_General_CI_AIを返します。 。しかし、sys.columnsの更新を強制する方法はありますか?

EXEC sp_refreshsqlmodule N'dbo.Employees' 

EXEC sp_refreshview N'dbo.Employees' 

は、彼らの両方が(DBO saアカウントととせずに試してみました)エラーを発生させる:

は、私はすでに​​とsp_refreshviewにStoredProcを試してみました

オブジェクト 'dbo.Employees'が見つかりませんでしたか、権限がありません。

+0

はい、私は正しいデータベースにあります。これらのStoredProcのパラメータはNVARCHAR –

+1

ですので、一重引用符が必要です@The_Black_Smurf列の照合順序が変更されていますか?私のテストでは、データベース照合を変更しても既存の列には影響しません。 – SQLChao

答えて

2

データベースの照合順序を変更しても、既存の列は変更されません。あなたは必要ですALTER TABLE

ALTER TABLE Employees 
    ALTER COLUMN FirstName VARCHAR(20) COLLATE Latin1_General_CI_AI 
+0

あなたは正しいです! SSMSは ''を表示しますが、列照合がデータベース照合にリンクされているわけではありません。 DBの照合順序を変更して列のプロパティを再度開くと、 ''は列の実際の照合に置き換えられます。 opositeも真です:DBの照合順序を列照合と一致させるように変更すると、SSMSは '<データベースのデフォルト値>'を表示します。 –

関連する問題