Sql-Server

跨數據庫更改列數據類型

  • July 16, 2012

我有一堆包含許多數據類型列的表ntext。我希望將特定數據庫的所有表中的所有此類列更改為nvarchar(max),因為計劃棄用 (編輯:也因為我不能將此類列與DISTINCT等一起使用GROUP BYALTER 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 一起使用。

引用自:https://dba.stackexchange.com/questions/20980