Sql-Server
跨數據庫更改列數據類型
我有一堆包含許多數據類型列的表
ntext
。我希望將特定數據庫的所有表中的所有此類列更改為nvarchar(max)
,因為計劃棄用 (編輯:也因為我不能將此類列與DISTINCT
等一起使用GROUP BY
)。ALTER TABLE
是否可以在不手動使用ALTER COLUMN
每個表的情況下完成此操作?我正在使用 MS SQL Server 2008。
不,這裡沒有魔法或揮手。例如,如果將同義詞應用於類型,那就太好了,但事實並非如此。如果您想讓這些列成為一等公民,您需要更改表格。您可以在某種程度上自動執行此操作,但我不會發布程式碼來幫助解決此問題,除非您指定“手動”的確切含義以及為什麼您認為這將是您想要避免的重大負擔。
為了自動化這個,你可以說:
DECLARE @sql NVARCHAR(MAX) = N''; SELECT @sql += CHAR(13) + CHAR(10) + N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) + '.' + QUOTENAME(OBJECT_NAME([object_id])) + ' ALTER COLUMN ' + QUOTENAME(name) + ' NVARCHAR(MAX)' + CASE is_nullable WHEN 0 THEN ' NOT NULL;' ELSE ';' END FROM sys.columns WHERE system_type_id = 99; PRINT @sql; -- EXEC sp_executesql @sql;
也就是說,您可能不想將這些列與 distinct / group by 一起使用。