Мне нужно вызвать delete в таблице, имя которого будет известно только во время выполнения.
У меня есть хранимая процедура, которая динамически формулирует оператор delete с именем таблицы и критериями, а затем передает эту строку в качестве аргумента функции EXEC() (все это внутри транзакции, очевидно).
Когда я запускаю хранимую процедуру, я получаю сообщение об ошибке - не могу найти хранимую процедуру - ссылаясь на оператор, который я сформулировал динамически и отправил в EXEC().
Здесь мой код:
DECLARE @dynTab AS varchar(50), @dynDelete AS varchar(255)
DECLARE @crsr CURSOR
SET @crsr = CURSOR FAST_FORWARD
FOR
SELECT dyn_tablename FROM dyn_tab WHERE dyn_doc_type_id IN (SELECT doc_id FROM tree_tab WHERE id = @id) AND dyn_tablecreated = 1
OPEN @crsr
FETCH NEXT FROM @crsr
INTO @dynTab
WHILE @@FETCH_STATUS = 0 AND @@ERROR = 0
BEGIN
SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id
EXEC @dynDelete
FETCH NEXT FROM @crsr
INTO @dynTab
END
CLOSE @crsr
DEALLOCATE @crsr
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
return 0
END
...
Здесь ошибка:
Не удалось найти хранимую процедуру "DELETE FROM myTable WHERE id = 1111"