2012-02-23 78 views
3

更新一次记录必须有不同的值,通过使用 过程返回整数值的过程SQL Server中执行存储过程中更新语句

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

这会为一个记录工作,但我想要的程序,以获得新每个记录的价值

+0

很难说没有更多的信息。存储过程如何确定哪一个值适合每一行?根据存储过程的不同,可能会创建一个表值函数,然后加入。 – 2012-02-23 00:23:22

+0

它通过一些特殊算法的算法返回序列号 当更新每个记录时必须有新的序列号 – Star 2012-02-23 00:26:42

+1

那么如果你可以在表值函数中执行该逻辑,那就是要走的路。 table1中的哪个列决定了@value的值是什么? – 2012-02-23 00:27:49

回答

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 
+0

这个伟大的东西,你使它几乎像我到现在为止做的 非常感谢你:) – Star 2012-02-23 01:06:22

0

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

另外,你使用value1的是什么?在你提供的例子中,这不是必需的。