数据库归类更改后刷新 SYS.columns
Refreshing SYS.columns after db collation change
假设您的数据库排序规则设置为 French_CI_AS
,并且您有一个 Employees
table,其中 FirstName
列排序规则设置为 database_default
。如果您 运行 以下代码将排序规则更改为 Latin1_General_CI_AI
,DATABASEPROPERTYEX
函数将 return Latin1_General_CI_AI
而 sys.columns
仍将 return 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_refreshsqlmodule
和 sp_refreshview
StoredProc:
EXEC sp_refreshsqlmodule N'dbo.Employees'
和
EXEC sp_refreshview N'dbo.Employees'
但它们都引发错误(尝试使用 sa 帐户但不使用 dbo):
Could not find object 'dbo.Employees' or you do not have permission.
更改数据库排序规则不会更改现有列。你需要 ALTER TABLE
ALTER TABLE Employees
ALTER COLUMN FirstName VARCHAR(20) COLLATE Latin1_General_CI_AI
假设您的数据库排序规则设置为 French_CI_AS
,并且您有一个 Employees
table,其中 FirstName
列排序规则设置为 database_default
。如果您 运行 以下代码将排序规则更改为 Latin1_General_CI_AI
,DATABASEPROPERTYEX
函数将 return Latin1_General_CI_AI
而 sys.columns
仍将 return 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_refreshsqlmodule
和 sp_refreshview
StoredProc:
EXEC sp_refreshsqlmodule N'dbo.Employees'
和
EXEC sp_refreshview N'dbo.Employees'
但它们都引发错误(尝试使用 sa 帐户但不使用 dbo):
Could not find object 'dbo.Employees' or you do not have permission.
更改数据库排序规则不会更改现有列。你需要 ALTER TABLE
ALTER TABLE Employees
ALTER COLUMN FirstName VARCHAR(20) COLLATE Latin1_General_CI_AI