我有一个更改SQL Server数据库排序规则的请求:
ALTER DATABASE solarwind95 整理SQL_Latin1_General_CP1_CI_AS
但我得到了这个奇怪的错误:
Meldung 5075,Ebene 16,Status 1, Zeile 1 Das'Spalte'-Objekt 'CustomPollerAssignment.PollerID'ist von'Datenbanksortierung'abhängig。 Die Datenbanksortierung kann nicht geändertwerden,wenn ein schemagebundenes Objekt von ihr abhängigthet。 Entfernen Sie死了 Anhängigkeitender Datenbanksortierung,und wiederholen Sie den Vorgang。
抱歉德国错误消息。我不知道如何将语言切换为英语,但这是一个翻译:
翻译:消息5075,第16层, 状态1,行1“列”对象 'CustomPollerAssignment.PollerID' 取决于'数据库排序。该 如果是,则无法更改数据库排序 模式绑定对象依赖于它。 删除数据库的依赖项 sortieren并重试。
我得到了更多这样的错误。
答案 0 :(得分:3)
您需要从视图和表值函数中删除WITH SCHEMABINDING
。要识别它们,您可以查询INFORMATION_SCHEMA
次查看:
SELECT TABLE_SCHEMA, TABLE_NAME AS VIEW_NAME
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%SCHEMABINDING%'
SELECT ROUTINE_SCHEMA, ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%SCHEMABINDING%'
ALTER
脚本。WITH SCHEMABINDING
”字样。您可以使用此脚本更改所有列的排序规则:
DECLARE @collation nvarchar(128)
DECLARE @commands table ([SQL] nvarchar(max))
DECLARE @cursor cursor
DECLARE @sql nvarchar(max)
SET @collation = 'SQL_Latin1_General_CP1_CI_AS'
INSERT @commands ([SQL])
SELECT 'ALTER TABLE ' + QUOTENAME(c.TABLE_SCHEMA) +'.'+ QUOTENAME(c.TABLE_NAME)
+ ' ALTER COLUMN ' + QUOTENAME(c.COLUMN_NAME)
+ ' ' + c.DATA_TYPE
+ ISNULL('(' + LTRIM(STR(c.CHARACTER_MAXIMUM_LENGTH)) + ')', '')
+ ISNULL(' COLLATE ' + @collation, '')
+ ' ' + CASE c.IS_NULLABLE WHEN 'NO' THEN 'NOT ' ELSE '' END + 'NULL'
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.TABLES t
ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND c.COLLATION_NAME <> @collation
SET @cursor = CURSOR FOR SELECT [SQL] FROM @commands
OPEN @cursor
FETCH NEXT FROM @cursor INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @sql
EXEC (@sql)
FETCH NEXT FROM @cursor INTO @sql
END
答案 1 :(得分:1)
这些将是聚簇索引的主键库。对于聚簇索引,记录按列的升序存储,如果更改数据库的排序规则,则需要重新排序所有表。
答案 2 :(得分:0)
在这种情况下,即使删除架构也无法帮助您
更改排序规则需要KB 325335
中描述的步骤主要适用于SQL Server 2000,但同样的原则适用