DB整理更改后清爽Sys.columns



假设您的数据库整理设置为 French_CI_AS,并且您的Employees表具有FirstName列集合设置为database_default。如果您运行以下代码将整理更改为Latin1_General_CI_AI,则DATABASEPROPERTYEX功能将返回Latin1_General_CI_AI,而sys.columns仍将返回French_CI_AS

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

如果您几分钟后运行相同的代码,则最终将更新sys.columns。但是,有没有办法强制sys.columns的更新?

我已经尝试了sp_refreshsqlmodulesp_refreshview StordProc:

EXEC sp_refreshsqlmodule N'dbo.Employees'

EXEC sp_refreshview N'dbo.Employees'

,但它们都引起了错误(使用SA帐户尝试,没有DBO):

找不到对象'dbo. employees'或您没有许可。

更改数据库平面图不会更改现有列。您需要ALTER TABLE

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

最新更新