【发布时间】:2018-04-30 11:00:56
【问题描述】:
我有一个包含两列 OldItem 和 NewItem 的 CSV;每列包含一个整数列表。注意 - CSV 将包含大约 1,000 行。
OldItem | NewItem
-----------------
1021669 | 1167467
1021680 | 1167468
1021712 | 1167466
1049043 | 1000062
我们在系统中有旧项目正在被新项目替换,我们想获取第一个 OldItem 的当前数量并将其分配给第一个 NewItem,第二个 OldItem 的数量分配给第三个 OldItem 的数量,等等
这个问题的另一个有趣的部分是电子表格中的项目编号与与数量相关的项目编号不匹配,系统中有一个名为 Alias 的转换表。
以下是我们正在与之交互的表和列: 表别名(本质上是一个转换表) 列别名(电子表格中的数字) 列 ItemID(“项目”表中包含数量的数字)
table Items(这包含所有新旧项目) 列项目 ID 列数量
我能想到的唯一方法是对每个 OldItem 做一个 foreach ,像这样,伪代码传入: foreach OldItem(选择 Alias.ItemID WHERE Alias.Alias = OldItem) 然后不知何故,因为我不知道如何在 SQL 中返回和使用该结果: 选择 Item.Quantity,其中 Item.ItemID = Alias.ItemID。 此时我有了我想要的数量,现在我必须参考 CSV,找到与 OldItem 关联的 NewItem,然后使用 NewItem 重新执行此操作,然后将 NewItem Quantity 更新为我从旧物品。
-头晕-
请帮忙,我可以通过在 PowerShell 中包装 SQL 来处理逻辑位来解决这个问题,但它会产生严重的性能后果,我必须在网络连接非常糟糕的许多数据库上远程执行此操作!
【问题讨论】:
-
我建议将 CSV 导入工作表(现在使用 BCP 或 SSIS 甚至 SSMS 都可以),然后使用 T-SQL 来完成您的工作。 T-SQL 在集合操作方面要快得多,尤其是对于较大的集合。但是我有T-SQL背景所以我有偏见
-
这是一次性任务还是每次更换一组新项目时都需要重复执行?
-
@Nick.McDermaid 我实际上并不知道不同 SQL 语言之间有什么区别,但是我仅限于默认情况下可以针对 MS SQL 数据库运行的任何内容,这都与 MS 有关RMS 数据库。不幸的是,我认为您的评论假设 SQL 知识水平比我高得多,因为这是我第一次编写 SQL。
-
@FDavidov 从理论上讲,这是每个数据库的一次任务,它必须在其各自数据库上的许多商店中完成,但无论如何这将是每个商店的一次任务。这种事情很多年都不会再发生了,到那时我们甚至都没有 RMS。
-
T-SQL 只是 SQL Server 的 SQL 语言。为您编写一些脚本来执行此操作可能非常简单,但您应该对这个过程感到满意。它肯定会解决糟糕的网络连接问题,因为网络流量非常少 - 所有处理都发生在站点的数据库中。新的项目记录已经存在于项目表中还是需要创建?
标签: sql sql-server