好的,正如您可能从标题的最后一部分中看出的那样,这是一个不理想的情况。
我正在使用一款行业特定的 Web 界面软件,我保证没有人听说过它,虽然它提供的海量数据输入功能很有限,但它确实允许我直接在其底层运行 SQL 查询MS SQL 数据库通过 8,000 个字符限制的 Web 表单。这是我对数据库的最直接访问。
我需要更新大约 3,700 条记录中的特定字段,每个记录都有唯一的数据。根据这个答案,我一直在做以下事情:
UPDATE guest
SET info4 = CASE guestid
WHEN 12345 THEN 'BNID: 917546553'
WHEN 67890 THEN 'BNID: B04695465'
[etc, etc.]
ELSE info4
END
(该info4
字段当前对于所有记录都是空的。)在达到字符限制并且必须使用下一个数据块运行新更新之前,我可以将大约 200 个案例放入一个查询中。
到目前为止我发现的事情:
- 不包括最后的
ELSE
声明将清空所有不满足案例的记录的字段。 - 在提交之前,我得到“受影响的行数:[表中的行数]”,而不是实际获得新数据的行数。
我知道我应该在最后放置一个WHERE guestid IN (12345, 67890)
以避免在每一行上运行更新,但是为了避免在每个更新语句块中运行超过我的字符限制,这将是地狱般的。
碰巧的是,我目前正在从 Excel 电子表格中获取源数据,将其全部粘贴到 Notepad++ 中,在其上运行查找/替换以插入必要的 SQL 语法,然后根据字符限制将其分块。
所以,简而言之,我的问题是:我是否已经尽可能地探索了这一点?有什么大而明显的东西我错过了,还是我应该以完全不同的方式解决这个问题?每个案例减少字符的奖励积分!
SET
可以简单一点:每个案例节省 6 个字符。
如果您可以创建一个表(甚至是临时表),您还可以使用:
接着:
尝试这样的事情:
这将一次更新 10k 行。由于您需要更新的唯一行将具有
NULL
info4,因此我们对其进行过滤。