![]() |
1
2
这是在批处理中执行此操作的另一种方法(不使用光标)。@KM看起来应该可以工作,但它看起来有点慢/有点吓人,涉及到大量的锁定和扫描;如果您将工作集限制为仅新的行,那么它应该非常快。 以下是测试数据的设置脚本:
所以我们有一个1:1,我们想把它变成1:1。为此,首先将更新列表排队(我们将在 其他 一组独特的列以加快以后的合并速度):
对于每个需要获得新颜色的标记,结果将有一行。然后插入新颜色并捕获全部输出:
最后合并它(这里是临时表上的额外索引的用处):
这个 应该 非常高效,因为它只需要查询一次生产表。其他所有操作都将在临时表中相对较小的数据上进行。 测试结果:
下面是我们的输出:
这应该是你想要的,对吧?没有诅咒,没有严重的丑陋。如果它占用了太多的内存或tempdb空间,那么可以用索引物理临时表替换temp表/表变量。即使有几百万行,也不可能填满事务日志并崩溃。 |
![]() |
2
2
如果可以使操作脱机,则可以更改数据库的恢复模型,进行更改,然后再更改恢复模型。 总的来说,尽管事务日志是为了保护您、允许回滚等,但为了跟踪目的,它会随着删除等操作而变大。 注意:使用这种方法,首先确保有一个良好的备份…. |
![]() |
3
2
我想不出你为什么要这样做。当前的一对多关系有什么问题?你现在不是要有更大的桌子来完成你所有的工作吗? 但是,考虑到您要这样做,首先是要备份事务日志,频率如何?如果频率低于每十五分钟一次,那么就改变它。备份日志时,日志会被截断。如果不备份日志,则日志会增大,直到耗尽空间。另外,您为日志指定的增长百分比可能太小。再增加一点,它也会帮助你。 您可以尝试在SSIS中完成这项工作,但我不知道这是否真的有助于日志记录问题。不过,这将有助于提高执行任务的性能。 |
![]() |
4
2
我不确定这在许多行中是如何工作的,但请尝试一下:
输出:
|
![]() |
5
0
如果要将多对一(多A对一B)关系转换为一对一(一A对一B),那么在我看来,最简单的方法是在A中创建字段以支持此操作,然后对A进行简单更新,将值从B复制到A中。 这样,您就完全摆脱了B,并且可以在一个更新查询中执行更改。类似:
|
![]() |
6
0
这就是我要做的: 创建一个返回两个表(A、B)中数据的查询 需要在最终表(c)中,并将其放入extractdata.sql文件中:
然后在命令窗口中,执行此命令以将数据提取到文件中:
要避免填充日志,请尝试在插入之前将数据库恢复模式设置为简单模式:
然后做一个
然后,在命令窗口中,执行此命令将数据大容量加载到表C中:
错误记录将显示在extractdata.err文件中,因此如果需要调整 表C的模式可以调整/截断/重新加载提取的数据,这样就不会 每次都需要运行查询。 完成后,将恢复模式设置回满:
|
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 8 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |