Gần đây, chúng tôi đã chuyển cơ sở dữ liệu của chúng tôi từ máy chủ SQL Server 2005 sang máy chủ SQL Server 2008 của chúng tôi. Mọi thứ chuyển động tốt đẹp, tuy nhiên bây giờ chúng tôi nhận thấy rằng chúng tôi đang nhận được xung đột đối chiếu. Máy chủ cũ có một collation khác với máy chủ mới.Cập nhật Collation của tất cả các trường trong cơ sở dữ liệu khi đang bay
Bây giờ bảng của chúng tôi được tạo trước khi di chuyển là một đối chiếu và những bảng được tạo sau đó là một đối chiếu khác.
Có cách nào để cập nhật các bảng/cột với collation cũ để collation mới?
Tôi hiểu việc thiết lập collation cơ sở dữ liệu/máy chủ mặc định không sửa đổi bất kỳ bảng hiện có nào (link). Tôi thực sự không muốn tạo lại cơ sở dữ liệu nếu tôi không phải làm vậy.
Bất kỳ trợ giúp nào thực sự đánh giá cao.
CẬP NHẬT
Thanks for guys giúp đỡ của bạn, cuối cùng đã nhận nó làm việc.
Để tham khảo trong tương lai, đây là kịch bản cuối cùng của tôi:
SELECT 'ALTER TABLE [' + SYSOBJECTS.Name + '] ALTER COLUMN [' + SYSCOLUMNS.Name + '] ' +
SYSTYPES.name +
CASE systypes.NAME
WHEN 'text' THEN ' '
ELSE
'(' + RTRIM(CASE SYSCOLUMNS.length
WHEN -1 THEN 'MAX'
ELSE CONVERT(CHAR,SYSCOLUMNS.length)
END) + ') '
END
+ ' ' + ' COLLATE Latin1_General_CI_AS ' + CASE ISNULLABLE WHEN 0 THEN 'NOT NULL' ELSE 'NULL' END
FROM SYSCOLUMNS , SYSOBJECTS , SYSTYPES
WHERE SYSCOLUMNS.ID = SYSOBJECTS.ID
AND SYSOBJECTS.TYPE = 'U'
AND SYSTYPES.Xtype = SYSCOLUMNS.xtype
AND SYSCOLUMNS.COLLATION IS NOT NULL
AND NOT (sysobjects.NAME LIKE 'sys%')
AND NOT (SYSTYPES.name LIKE 'sys%')
GO
Đây là site có chứa các kịch bản tôi dựa trên. Tôi đã phải tinh chỉnh nó để làm cho nó hoạt động chính xác.
Russell, bạn nên đưa ra giải pháp cho câu trả lời! –
Cảm ơn Philipp, dù sao thì đó cũng là câu hỏi hàng đầu, và OMG Ponies đã giúp tôi đạt được điều đó. :) – Russell