跨数据库更改列数据类型

Ano*_*mus 4 sql-server-2008 sql-server datatypes type-conversion

我有一堆包含许多数据类型列的表ntext。我想改变所有这些列的特定数据库的所有表格中nvarchar(max),由于计划弃用 (编辑:还因为我不能使用这样的列DISTINCTGROUP BY等等)。是否可以在不手动为每个表使用ALTER TABLEwith 的情况下完成此ALTER COLUMN操作?

我正在使用 MS SQL Server 2008。

Aar*_*and 5

不,这里没有魔法或挥手。如果同义词适用于类型,那就太好了,但事实并非如此。如果您想让这些列成为一等公民,则需要更改表。您可以在某种程度上自动执行此操作,尽管我不会发布代码来帮助解决此问题,除非您指定“手动”的确切含义以及您认为这将是您想要避免的重大负担的原因。

要自动执行此操作,您可以说:

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;
Run Code Online (Sandbox Code Playgroud)

也就是说,无论如何,您可能不想将这些列与不同的 / group by 一起使用。