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

时间:2011-12-19 15:50:51

标签: sql sql-server-2008 loops

是否有更有效的方法来编写此代码?或者用更少的代码?

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

3 个答案:

答案 0 :(得分:12)

您可以在单个UPDATE中执行此操作,而无需循环。

UPDATE tt
    SET vendortestcode = tcl.test_code
    FROM testtemplate tt
        INNER JOIN test_code_lookup tcl
            ON tt.name = tcl.test_name

答案 1 :(得分:6)

你可以尝试这样的单一更新:

UPDATE A
SET A.vendortestcode = B.test_code
FROM testtemplate A
INNER JOIN test_code_lookup B
ON A.name = B.test_name

此外,您现在的方式是错误,因为您在两个单独的查询中获取了TOP 1 Id和TOP 1名称,而没有ORDER BY,所以它不确定您是否为您的身份证使用正确的名称。

答案 2 :(得分:1)

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

update testtemplate set vendortestcode = dbo.get_test_code_from_name(name)
相关问题