【问题标题】:Efficiently add a column with a value有效地添加具有值的列
【发布时间】:2015-03-16 11:03:14
【问题描述】:

我正在尝试向 tsql 表中添加一列,我在 c# 中使用 SMO 执行此操作。更改表格很好,但我想将列设置为具有值。该表包含 6.5 亿行,更新查询需要一天半的时间才能运行。

更新 [TempDatabase].[dbo].[table1] 设置 RawSource = 'DTP'

这是我在上面运行的查询。

谁能想到更有效的方法?

提前致谢。

【问题讨论】:

  • 我听说过“快速添加列”,但仅适用于 Oracle 数据库。 asktom.oracle.com/pls/asktom/…如果你使用SQL Server,我不知道更好的方法。

标签: sql tsql smo


【解决方案1】:

有时,使用新值复制表并在单个命令中重新创建表会更有效。此外,您可能希望确保这些操作的日志记录最少。

可能最好的解决方案是在创建列时使用default 值:

alter table table1 add RawSource varchar(255) not null default 'DTP';

如果不希望默认向前移动,可以在添加列后将其删除。

另一种方法使用计算列,但基本上做同样的事情:

alter table table1 add _RawSource varchar(255);

alter table1 add RawSource as (coalesce(_RawSource, 'DTP'));

【讨论】:

  • 您需要将列定义为NOT NULL,否则它不会使用默认值填充现有行
【解决方案2】:

仅在向表中添加列时,我们可以设置一个默认值,它将适用于所有行

注意:你应该保持 not null 强制,因为如果不是所有行都适用于 nulls

 alter table  table_name
 add  row_source nvarchar(5) not null default(N'DTP')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2018-09-03
    • 1970-01-01
    • 2016-07-02
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多