У меня есть таблица с примерно 17 тысячами уникальных строк, для которых мне нужно последовательно запускать этот набор операторов.
Я пытался:
@paparazzo любезно взгляните на обновленный вопрос
Мне все еще не хватает деталей. Я сдаюсь.
Ответ можно найти здесь. spaghettidba.com/2015/04/24/…
Рассматривали ли вы INSERT TRIGGER на TABLE1, из которого можно вызвать хранимую процедуру на TABLE2?
Если это просто обновление идентификатора в таблице 2, зачем вам SP, есть ли какая-то особая логика в этом SP, или вы можете выполнить обновление без использования SP. Предложение OUTPUT - ваш помощник (в операторе вставки) для получения списка идентификаторов.


Вопросы недостаточно подробны. По идее я хотел бы использовать что-то вроде этого
-- create a output table to hold new id, and key columns to join later
DECLARE @OutputTbl TABLE (ID INT, key_Columns in MASTERTABLE)
INSERT INTO TABLE1
OUTPUT INSERTED.ID, MASTERTABLE.key_columns INTO @OutputTbl
SELECT *
FROM MASTERTABLE
UPDATE T2
SET ID = o.ID
FROM TABLE2 t2
INNER JOIN OutputTbl o
ON t2.key_column = o.key_column
Может быть, вы можете рассмотреть TRIGGER на TABLE1, из которого можно вызывать хранимую процедуру на TABLE2, а затем вы можете вызывать свой INSERT по своему желанию / необходимости .. один за другим или блоками ..
DROP TRIGGER TR_UPD_TABLE2
GO
CREATE TRIGGER TR_UPD_TABLE2 ON TABLE1 AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
DECLARE @columnID INT = NULL
IF (SELECT COUNT(*) FROM INSERTED)=1 BEGIN
-- SINGLE INSERT
SET @columnID = (SELECT columnID FROM INSERTED)
EXEC TableTwoUpdateProcedure @columnID
END ELSE BEGIN
-- MASSIVE INSERT (IF NEEDED)
SET @columnID = 0
WHILE @columnID IS NOT NULL BEGIN
SET @columnID = (SELECT MIN(columnID) FROM INSERTED WHERE columnID > @columnID)
IF @columnID IS NOT NULL BEGIN
EXEC TableTwoUpdateProcedure @columnID
END
END
END
END
Я предполагаю, что идентификатор - это личность. Вопрос требует более подробного описания. Посмотрите результат. VTC не совсем ясен, но я удалю это, когда вы предоставите более подробную информацию.