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

标签 sql sql-server sql-server-2008 sql-server-2005

我有一个 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 替换为您的实际表名 - 您应该可以开始了!首先在您的实时数据副本测试!

关于sql - 单个 SQL 查询一次性更新表中所有列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11150705/

相关文章:

sql - 根据另一个表中的列名从一个表中选择列

sql - MySQL 条件删除外键脚本

sql - 限制从联合查询返回的行的最有效方法 - SQL

sql - 如何使用 SQL Server 2008 中的函数生成字母数字随机数

sql-server - 在 LINQ 查询中使用 DateTime?.Value.TimeOfDay

mysql - 一个表可以有多个主键吗?

结果可以在不同列中的最后 x 个结果的 MySQL sum avg

java - H2数据库备份恢复序列已存在异常

sql-server - 在 Wildfly 11 上,Microsoft SQL Server 驱动程序错误地尝试连接到 localhost

sql - 检查 SQL Server 中的重复数据