我有一个SQL Server表,其中有625列使用不同的数据类型创建,例如intvarchar(25)decimal(18, 2)等。

现在对将所有列的数据类型更改为varchar(255)感兴趣。而不是一个个地对所有列执行下面的查询,而是通过单个SQL Server查询来一次性更改表中所有列的数据类型?

ALTER TABLE dbo.Employee
ALTER COLUMN FirstName VARCHAR(255) NOT NULL

期待您的回应。

最佳答案

没有一个单独的“魔术”项目符号可以执行此操作-这是非常不寻常的操作,因此它本身不受支持。

您可以做的是从系统目录 View 中遍历表的各列,动态创建这样的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

用您的实际表名替换YourTableNameHere-您应该一切顺利! 首先在您的实时数据的副本上测试此!

07-27 13:13