SQL Server在update语句中执行存储过程

时间:2012-02-23 00:19:01

标签: sql sql-server-2008 stored-procedures

每个更新的记录必须使用一个过程具有不同的值 该过程返回单个整数值

declare @value int;
exec @value = get_proc param;
update table1 set field1 = @value;

这适用于一条记录,但我希望程序为每条记录获取新值

2 个答案:

答案 0 :(得分:2)

这是一个如何使用TVF执行此类更新的简单示例:

USE tempdb;
GO

CREATE TABLE dbo.Table1(ID INT, Column1 INT);

INSERT dbo.Table1(ID)
    SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3;
GO

CREATE FUNCTION dbo.CalculateNewValue
(@ID INT)
RETURNS TABLE
AS
    -- no idea what this logic would be,
    -- just showing an example

    RETURN(SELECT NewValue = @ID + 1);
GO

SELECT t1.ID, n.NewValue
    FROM dbo.Table1 AS t1 
    CROSS APPLY dbo.CalculateNewValue(t1.ID) AS n;

结果:

ID NewValue
-- --------
 1        2
 2        3
 3        4

现在使用相同信息的更新:

UPDATE t1 SET Column1 = n.NewValue
    FROM dbo.Table1 AS t1 
    CROSS APPLY dbo.CalculateNewValue(t1.ID) AS n;

SELECT ID, Column1 FROM dbo.Table1;

结果:

ID Column1
-- -------
 1       2
 2       3
 3       4

答案 1 :(得分:0)

它真的需要成为程序吗?如果您可以将get_proc实现为函数,那么您可以将它应用于您想要的每个记录;)

另外,你使用value1做什么?在您提供的示例中,不需要它。