每次更新记录时,必须使用一个过程来获得不同的值。该过程返回单个整数值。
declare @value int;
exec @value = get_proc param;
update table1 set field1 = @value;
这段代码只适用于一个记录,但我希望该过程能为每个记录获取新值。
每次更新记录时,必须使用一个过程来获得不同的值。该过程返回单个整数值。
declare @value int;
exec @value = get_proc param;
update table1 set field1 = @value;
以下是如何使用表值函数来执行此类型的更新的快速示例:
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
真的需要是一个过程吗?如果您可以将get_proc实现为函数,则可以将其应用于所需的每个记录;)
此外,您使用value1是用来做什么的?在您提供的示例中,它是不必要的。