更新SQL Server表中所有行的更快方法

Quicker way to update all rows in a SQL Server table

有没有更有效的方法来写这段代码?或者用更少的代码?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT *
INTO #Temp
FROM testtemplate

DECLARE @id INT
DECLARE @name VARCHAR(127)

WHILE (SELECT COUNT(*) FROM #Temp) > 0
BEGIN

    SELECT TOP 1 @id = testtemplateid FROM #Temp
    SELECT TOP 1 @name = name FROM #Temp

    UPDATE testtemplate
    SET testtemplate.vendortestcode = (SELECT test_code FROM test_code_lookup WHERE test_name = @name)
    WHERE testtemplateid = @id

     --finish processing
    DELETE #Temp WHERE testtemplateid = @id
END
DROP TABLE #Temp


您可以在一次更新中完成此操作,而无需循环。

1
2
3
4
5
UPDATE tt
    SET vendortestcode = tcl.test_code
    FROM testtemplate tt
        INNER JOIN test_code_lookup tcl
            ON tt.name = tcl.test_name


您可以尝试以下单个更新:

1
2
3
4
5
UPDATE A
SET A.vendortestcode = B.test_code
FROM testtemplate A
INNER JOIN test_code_lookup B
ON A.name = B.test_name

而且,您现在这样做是错误的,因为您在两个单独的查询中使用了一个前1个ID和一个前1个名称,而没有一个ORDER BY,所以它不确定您是否使用了正确的ID名称。


您可以编写一个函数来更新vendortestcode。然后代码简化为一个SQL语句:

1
UPDATE testtemplate SET vendortestcode = dbo.get_test_code_from_name(name)