使用用户定义更新SQL Server中的表

时间:2015-04-27 19:20:47

标签: sql-server

我正在使用大约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'

2 个答案:

答案 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)

如果你正在描述一个真实的情况,那么这不是另一个面向大学的限制性挑战:

  1. 使用索引以提高性能。

  2. MS SQL中的函数可以节省开发时间和/或使代码更清晰,但它们不是索引“杀手”;)

  3. 如果您的示例是现实的,那么您当然可以使用一个更新语句作为上面提到的@sidux。但请记住,索引语句将在几秒内完成......

  4. 我建议您使用上述语句以及索引。