SQL Server выполняет хранимую процедуру в операторе обновления - PullRequest
3 голосов
/ 23 февраля 2012

каждая обновленная запись должна иметь различное значение с помощью процедуры процедура возвращает одно целое значение

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

это будет работать для одной записи, но я хочу, чтобы процедура получала новое значение для каждой записи

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Просто краткий пример того, как использовать 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 голосов
/ 23 февраля 2012

Действительно ли это должна быть процедура? Если вы можете реализовать get_proc как функцию, вы можете применить ее к каждой записи, которую вы хотите;)

Кроме того, для чего вы используете значение1? В приведенном вами примере это не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...