我有光标性能问题,我想避免。
我想解决的问题是:
使用由UDF计算的结果更新Main表中每条记录(大约6000000)(通过使用一个更新语句)的列(VARCHAR),UDF本身应该更新另一个Counter表中的计数器。
- 问题是UDF无法更新Countertable,因为它是副作用。
- 由于READONLY标志,它也无法更新临时表或变量表。
- 我在主表上使用了更新触发器,但是触发器通过一个存储在名为inserted的表中的单个更新语句触发了一次。
我选择的解决方案是使用Cursor,如下所示。
但是相信我,它在125小时内是太慢了(不可能)。
那里有人可以帮助我吗?
答案 0 :(得分:1)
我假设您的主表中有另一列标识该行,否则计数器没有多大意义。
你能尝试一下吗?如果我理解你的问题,那么既不需要函数也不需要游标。只是一个临时表,因为您无法同时读取和更新表。
INSERT INTO tmpTable
SELECT
yourPrimaryKey, sex, YEAR(dob) AS dobyear, ROW_NUMBER() OVER (PARTITION BY YEAR(dob) ORDER BY dob) AS counter
FROM
mainTable;
UPDATE mainTable
SET code = CONCAT(tmpTable.sex, tmpTable.dobyear, counter)
FROM
mainTable
INNER JOIN tmpTable
ON mainTable.yourPrimaryKey = tmpTable.yourPrimaryKey;
没有经过测试,可以原谅任何语法错误或其他原因。