单个SQL查询一次更新表中所有列的数据类型

Vik*_*nte 2 sql sql-server sql-server-2005 sql-server-2008

我有有不同的数据类型一样创建625列的SQL Server表int,varchar(25),decimal(18, 2),等...

现在我有兴趣将所有列的数据类型更改为varchar(255).有没有一个SQL Server查询可以一次性更改表中所有列的数据类型,而不是逐个执行下面所有列的查询?

ALTER TABLE dbo.Employee 
ALTER COLUMN FirstName VARCHAR(255) NOT NULL
Run Code Online (Sandbox Code Playgroud)

期待您的回复.

mar*_*c_s 5

没有一个单一的"神奇"子弹可以做到这一点 - 这是一个相当不寻常的操作,所以它本身不受支持.

你可以做的是从系统目录视图迭代表的列,动态创建这样的ALTER语句,并执行它 - 如下所示:

DECLARE AlterTableCursor CURSOR FAST_FORWARD 
FOR
    SELECT 
        AlterCmd = 'ALTER TABLE dbo.YourTableNameHere ALTER COLUMN ' + name + ' VARCHAR(255) NULL'
    FROM 
        sys.columns
    WHERE 
        object_id = OBJECT_ID('dbo.YourTableNameHere')

DECLARE @AlterTableCmd NVARCHAR(200)

OPEN AlterTableCursor

FETCH NEXT FROM AlterTableCursor INTO @AlterTableCmd

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC (@AlterTableCmd)

    FETCH NEXT FROM AlterTableCursor INTO @AlterTableCmd
END

CLOSE AlterTableCursor
DEALLOCATE AlterTableCursor
Run Code Online (Sandbox Code Playgroud)

YourTableNameHere用你的实际表名替换- 你应该好好去!首先在您的实时数据副本上进行测试!