当前位置: 首页 > 面试题库 >

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

酆耀
2023-03-14
问题内容

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

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

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

期待您的回应。


问题答案:

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

您可以做的是从系统目录视图中遍历表的列,动态创建这样的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用您的实际表名替换-,您应该可以使用了!首先 在您的实时数据副本* 上进行 测试*



 类似资料:
  • 问题内容: 我正在NHibernate中对单个属性执行标准更新。但是,在提交事务时,sql更新似乎设置了我映射到表上的所有字段,即使它们没有更改。当然这不是Nhibernate中的正常行为吗?难道我做错了什么?谢谢 问题答案: 这是正常现象。您可以尝试添加到类定义中以覆盖此行为。

  • 我有两个表:包含5列(col1、col2、col3、col4、val1)的表1和包含5列(col1、col2、col3、col4、val2)的表2。1.表1.val1不包含任何值。2.对于表1和表2来说,col1、col2、col3和col4是相同的,它们是主键。 我想做的是,当table1.col1=table2.col1和table1.col2=table2.col2和table1.col3=

  • 问题内容: 我处于必须更新数据库中约12,000个项目的情况。每行都需要镜像我之前制作的一个excel文件。我已经创建了创建SQL语句每一行的文件,但是不确定是否可以在单个查询中运行每一行。 这是我正在尝试做的一个例子。 这项工作有效吗,或者我要实现的目标还有更好的选择吗? 每个项目将具有唯一值,并且要更改的列也将具有唯一值。我看不到如何通过循环或到目前为止找到的任何其他方法来实现此目的。我意识到

  • 我有两个表:< code>person_concern和< code>person。它们都有一个< code >代码列,而< code>person有一个< code>dept列。我想从< code>person_concern表中选择数据,其中< code>person表中的< code>dept列= 30。 基本上,表的每一行都有不同的代码,然后将该人员放入一个部门。因此,我可以在表中使用相同

  • 问题内容: 尝试在运行时向我的Web应用程序中的所有MySQL Select查询添加注释。 例如,代码中的原始查询如下所示: 所有这些都需要 在运行时 修改为: 该应用程序在Hibernate 4.2.1上运行。我能想到的唯一解决方案是扩展并在中添加。 对于为实现此目的而修改的方法有些困惑。希望任何朝着正确方向的指针。 可以重写in方法来做到这一点吗? 编辑1:自定义MySQL方言中的transf

  • 问题内容: 我看到这对笨论坛 考虑以下代码 这显然是您在Codeigniter中这样做的方式 实际上这是行不通的。我看了一下生成的SQL,结果甚至没有提到联接。 有谁知道如何使用Codeigniter的Active Record数据库类对联接进行更新? 问题答案: 我发现的一种解决方案是完全删除联接并将联接条件移到“ where”函数中,此外,您还需要更改更新字符串以包括新表。