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