gpt4 book ai didi

sql-server - 具有单个值的大表的 UPDATE 列

转载 作者:行者123 更新时间:2023-12-02 03:23:22 26 4
gpt4 key购买 nike

我有一个包含 20 亿 行的表。恢复模式很简单。

我有一个简单的任务要做:

UPDATE myTable SET columnA = 'X'

这个任务一开始看起来很简单,但我到处都读到,最好对另一个表进行 SELECT INTO,或者进行批量更新。

是否需要批量更新?上面的查询会破坏事务日志吗?

如果我创建另一个表,我肯定会用完空间。

任何帮助将不胜感激。

编辑:我没有主键。此外,没有索引,没有约束,任何东西。

也许这会有所帮助?

SET rowcount 10000
Update myTable
set columnA ='X'
where columnA <> 'X'

while @@rowcount>0

BEGIN
SET rowcount 10000
Update myTable
set columnA ='X'
where columnA <> 'X'

end

SET rowcount 0

最佳答案

这是一种非常疯狂的非 sql 方式,但您可以使用 ETL 工具(例如 SSIS)来避免登录到很大程度。

免责声明:这可能是一个耗时的步骤,并且可能会占用您服务器上的文件空间。

有两个数据流任务(DFT1,DFT2)。

DFT1

enter image description here

使用派生列转换,传递值“A”而不是 columnA 的实际值。

平面文件现在将包含必要的数据。下一步是将其导入表中。

在 DFT 之外,现在截断此表。 TRUNCATE 你可能知道是非日志操作。因此您的交易日志不会被触及。

最后,

DFT2

将数据从平面文件导入到表A。

enter image description here

SSIS 在内部进行最少的日志记录,因此交易日志不会受到太多干扰。

另外,我刚刚看到你在你的问题中添加了 ssis 标签,所以这个答案应该是有效的。

关于sql-server - 具有单个值的大表的 UPDATE 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com