Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 调用EXEC()生成错误:找不到存储过程_Sql Server_Tsql - Fatal编程技术网

Sql server 调用EXEC()生成错误:找不到存储过程

Sql server 调用EXEC()生成错误:找不到存储过程,sql-server,tsql,Sql Server,Tsql,我需要对一个表调用delete,该表的名称只有在运行时才为人所知 我有一个存储过程,它使用tablename和criteria动态地生成delete语句,然后将该字符串作为参数传递给EXEC函数——显然,所有这些都在事务中 当我运行存储过程时,我得到一个错误-找不到存储过程-引用我动态制定并发送给EXEC的语句 这是我的密码: DECLARE @dynTab AS varchar(50), @dynDelete AS varchar(255) DECLARE @crsr CURSOR

我需要对一个表调用delete,该表的名称只有在运行时才为人所知

我有一个存储过程,它使用tablename和criteria动态地生成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

以下是错误:

找不到存储过程“从id=1111的myTable中删除”

不带括号的EXEC尝试调用过程

试一试EXEC@dynDelete你需要写 EXEC@dynDelete

使用EXEC或EXECUTE执行Sql查询,如下所示:

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


如果使用EXEC,则从SqlDataSource中删除DeleteCommandType

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