Sql 高效地添加具有值的列

Sql 高效地添加具有值的列,sql,tsql,smo,Sql,Tsql,Smo,我试图向tsql表中添加一列,我使用c#中的SMO来实现这一点。更改表很好,但我想将列设置为具有值。该表包含6.5亿行,更新查询需要一天半的时间才能运行 更新[TempDatabase].[dbo].[table1]设置RawSource='DTP' 这就是我在上面运行的查询 有人能想出一种更有效的方法吗 提前感谢。有时,使用新值复制表并在单个命令中重新创建表会更有效。此外,您可能希望确保这些操作的日志记录最少 最好的解决方案可能是在创建列时使用默认值: alter table table1 a

我试图向tsql表中添加一列,我使用c#中的SMO来实现这一点。更改表很好,但我想将列设置为具有值。该表包含6.5亿行,更新查询需要一天半的时间才能运行

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

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

有人能想出一种更有效的方法吗


提前感谢。

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

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

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'));

在向表中添加列时,我们只能设置一个默认值,该值将适用于所有行

注意:U应该保持非空强制,因为如果不是所有行都适用于空值

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

我听说过“快速添加列”,但只适用于Oracle数据库。如果您使用SQL Server,我不知道更好的方法。您需要将列定义设置为
NOT NULL
,否则它不会用默认值填充现有行