如何有效填写新创建的列?

时间:2016-10-19 19:27:29

标签: sql-server

我在下面有一张表,我将创建一个名为'Amount'的新列。现有列“Id”是外键,并将表中的信息链接为“贷款”('Id'是表'贷款'的主键)。我想做的简单事情是从表'Loan'中获取正确数量的每个新创建的Amount单元格,并使用'Id'进行映射。我目前使用局部变量和自创的表类型来逐个查找“贷款”中的金额值。有没有其他更有效的方法来执行相同的操作?非常感谢。 MyTable如下:

enter image description here

我的代码如下:

ALTER TABLE MyTable
ADD Amount  MONEY


CREATE TYPE ListofID AS TABLE (idx INT IDENTITY(1,1), ID VARCHAR(255))

DECLARE @Table_ID_List  ListofID
INSERT @Table_ID_List  (
ID )
SELECT Id FROM MyTable

DECLARE @i INT
DECLARE @cnt INT
SELECT @i = min(idx) - 1, @cnt = max(idx) FROM @Table_ID_List  

DECLARE @app VARCHAR(255)

WHILE @i<@cnt

BEGIN

     SELECT @i = @i + 1
     SELECT @app = (SELECT ID FROM @Table_ID_List  WHERE idx = @i)

     UPDATE MyTable
     SET Amount =(SELECT Amount FROM Loan  WHERE Id =  @app)

     WHERE Id =  @app

END

2 个答案:

答案 0 :(得分:1)

根据表的大小,您可能希望使用SWITCH语句将整个表一次性传输到新模式。

https://sqlperformance.com/2012/08/t-sql-queries/t-sql-tuesday-schema-switch-a-roo

答案 1 :(得分:0)

我可能错过了您的问题,但我相信您可以通过Update语句直接执行此操作。有点像:

ALTER TABLE MyTable ADD Amount MONEY


UPDATE 
   t1 
SET
   t1.Amount = t2.Amount 
FROM
    MyTable t1
    JOIN Loan t2 
    ON t1.Id = t2.Id

难道不会这样做吗?