0
我需要更改已還原數據庫的排序規則以匹配服務器和tempdb數據庫。我明白我可以使用ALTER DATABASE和ALTER TABLE來改變收集。但是它只會影響添加到表格中的新數據嗎?我一定要沿着這條路走,在他們重新創建用戶數據庫和所有對象 更改數據庫中所有對象的排序規則
- 腳本新數據庫
- 在正確的集合中編寫表格並導入所有數據。
這是一個Microsoft SQL Server 2008
我需要更改已還原數據庫的排序規則以匹配服務器和tempdb數據庫。我明白我可以使用ALTER DATABASE和ALTER TABLE來改變收集。但是它只會影響添加到表格中的新數據嗎?我一定要沿着這條路走,在他們重新創建用戶數據庫和所有對象 更改數據庫中所有對象的排序規則
這是一個Microsoft SQL Server 2008
我用這個腳本:
DECLARE @collation NVARCHAR(64)
SET @collation = 'Latin1_General_CI_AS'
SELECT
'ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] '
+ 'ALTER COLUMN [' + COLUMN_NAME + '] '
+ DATA_TYPE + '(' + CASE CHARACTER_MAXIMUM_LENGTH
WHEN -1 THEN 'MAX'
ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) END + ') '
+ 'COLLATE ' + @collation + ' '
+ CASE WHEN IS_NULLABLE = 'NO' THEN 'NOT NULL' ELSE 'NULL' END
FROM INFORMATION_SCHEMA.columns
WHERE COLLATION_NAME IS NOT NULL
AND TABLE_NAME IN (SELECT TABLE_NAME from information_schema.tables WHERE table_type = 'BASE TABLE' )
AND COLLATION_NAME <> @collation
請注意,如果索引,主鍵約束或唯一約束引用列,則ALTER COLUMN將失敗。 – 2014-08-29 12:24:40
ALTER COLUMN將改變現有數據的整理,但是你不能有指標/引用列的約束。我認爲導出/導入方法是最乾淨的,但您可以在同一個數據庫中創建新對象,遷移數據,刪除舊錶並重命名。 – 2014-08-29 12:27:28
@ DanGuzman-SQLServerMVP:如果(舊)表被其他表引用,是不是也需要刪除外鍵(並在之後重新創建它們)? – 2014-08-29 12:34:51
是的,同樣的考慮適用於外鍵約束。 – 2014-08-29 12:43:06