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个名称,而没有一个
您可以编写一个函数来更新vendortestcode。然后代码简化为一个SQL语句:
1 | UPDATE testtemplate SET vendortestcode = dbo.get_test_code_from_name(name) |