вызов EXEC () приводит к ошибке: не удалось найти хранимую процедуру - PullRequest
12 голосов
/ 05 декабря 2011

Мне нужно вызвать удаление таблицы, имя которой будет известно только во время выполнения.

У меня есть хранимая процедура, которая динамически формулирует оператор удаления с именем таблицы и критериями, а затем передает эту строку какаргумент функции 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»

Ответы [ 4 ]

21 голосов
/ 05 декабря 2011

EXEC без скобок пытается вызвать процедуру.

Попробуйте EXEC(@dynDelete)

3 голосов
/ 05 декабря 2011

Вам нужно написать
EXEC (@dynDelete)

1 голос
/ 16 декабря 2012

Удалить DeleteCommandType из SqlDataSource, если используется EXEC

1 голос
/ 05 декабря 2011

Используйте EXEC() или EXECUTE() для выполнения запроса Sql, как показано ниже:

SET @dynDelete  = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
EXEC(@dynDelete)

OR

SET @dynDelete  = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
EXECUTE(@dynDelete)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...