我有一张包含现有数据的表格。我需要在表中添加一个新列,该列将使用存储过程检索的值进行填充。这适用于我将添加到表中的新数据。
如何为每个现有行运行存储过程,从两个现有列传入参数,然后使用结果更新新列。实际上,我希望运行以下内容:
UPDATE
TableWithNewColumn
SET
NewColumn = EXEC NewProcedure(TableWithNewColumn.ID, TableWithNewColumn.Code);
请参阅此处的小提琴:http://www.sqlfiddle.com/#!3/b0625/1
我知道标量函数对于此任务是理想的,但遗憾的是SP已由第三方提供,这是我提供数据的唯一方法。
答案 0 :(得分:2)
下面是一个游标示例,假设id列是唯一的。如果您可以更改存储过程以返回输出参数,则可以直接在update语句中使用output参数,而不是将proc结果集插入表变量和更新中的子查询。
DECLARE
@id int,
@code varchar(16);
DECLARE @Result TABLE (
ResultValue varchar(16)
);
DECLARE TableRows CURSOR LOCAL FOR
SELECT
id
,code
FROM dbo.TableWithNewColumn;
OPEN TableRows;
WHILE 1 = 1
BEGIN
FETCH NEXT FROM TableRows INTO @id, @code;
IF @@FETCH_STATUS = -1 BREAK;
DELETE FROM @Result;
INSERT INTO @Result EXEC dbo.NewProcedure @id, @code;
UPDATE TableWithNewColumn
SET NewColumn = (SELECT ResultValue FROM @Result)
WHERE id = @id;
END;
CLOSE TableRows;
DEALLOCATE TableRows;
答案 1 :(得分:0)
这是一个想法...使用ID,Code和NewColumn结果的值填充TEMP表。然后使用对临时表的连接更新表TableWithNewColumn。我建议这样做,因为用所有这些过程调用进行更新会很慢。