我正在使用大约100种不同的条件更新SQL Server中的表。以下是我正在进行的更新SQL的示例列表。
问题是表mytable.table1
有点大(有200万行)。这100个更新查询一起花费超过10分钟。
有没有办法创建用户定义的函数来用更少的查询更新表。我在上面提到的表格中没有索引。每个更新查询都必须遍历整个表。
我在SQL Server中读了一些关于用户定义函数的内容,并没有太多关于我的情况。
--------------------更新1 ------------------------- ------
我的更新查询不仅将列更新为单个值。
update p
set p.column1 = 'abc'
from mytable.table1 p
where p.column2 = 'a' and p.column3 = 'b'
update p
set p.column1 = 'edf'
from mytable.table1 p
where p.column2 = 'c' or p.column4 = 'd'
update p
set p.column1 = 'wxf'
from mytable.table1 p
where p.column3 = 'd' and p.column5 = 'f'
update p
set p.column1 = 'xyz'
from mytable.table1 p
join mytable.table2 c on p.column1 = c.column1
where p.column2 = 'w' and p.column3 = 'a'
update p
set p.column1 = 'ere'
from mytable.table1 p
join mytable.table2 c on p.column1 = c.column1
join mytable.table3 r on p.column2 = r.column2
where p.column2 = 'w' and p.column3 = 'b' or p.column4 = 'a'
答案 0 :(得分:2)
尝试类似的东西:
UPDATE
p
SET
p.column1 = 'abc'
FROM
mytable.table1 p
LEFT JOIN mytable.table2 c ON p.column1 = c.column1
LEFT JOIN mytable.table3 r ON p.column2 = r.column2
WHERE
( ( p.column2 = 'a'
AND p.column3 = 'b'
)
OR ( p.column2 = 'c'
OR p.column4 = 'd'
)
OR ( p.column3 = 'd'
AND p.column5 = 'f'
)
OR ( c.column1 IS NOT NULL
AND p.column2 = 'w'
AND p.column3 = 'a'
)
OR ( c.column1 IS NOT NULL
AND r.column2 IS NOT NULL
AND ( p.column2 = 'w'
AND p.column3 = 'b'
OR p.column4 = 'a'
)
)
);
答案 1 :(得分:1)
如果你正在描述一个真实的情况,那么这不是另一个面向大学的限制性挑战:
您 使用索引以提高性能。
MS SQL中的函数可以节省开发时间和/或使代码更清晰,但它们不是索引“杀手”;)
如果您的示例是现实的,那么您当然可以使用一个更新语句作为上面提到的@sidux。但请记住,索引语句将在几秒内完成......
我建议您使用上述语句以及索引。