Sql server SQL Server存储过程未执行另一个SP

Sql server SQL Server存储过程未执行另一个SP,sql-server,Sql Server,我有一个SQL Server存储过程,但是当它执行时,它似乎没有执行我希望调用的另一个存储过程 这是我的存储过程示例,您可以看到我的EXEC语句 如果有人知道为什么这不起作用,请告诉我!谢谢 ALTER PROCEDURE [dbo].[AddField] @tablename nvarchar(20), @newfield nvarchar(20), @datatype nvarchar(20), @length nvarchar(20), @displaynam

我有一个SQL Server存储过程,但是当它执行时,它似乎没有执行我希望调用的另一个存储过程

这是我的存储过程示例,您可以看到我的EXEC语句

如果有人知道为什么这不起作用,请告诉我!谢谢

ALTER PROCEDURE [dbo].[AddField]
   @tablename nvarchar(20),
   @newfield nvarchar(20),
   @datatype nvarchar(20),
   @length nvarchar(20),
   @displayname nvarchar(20),
   @tableseq nvarchar(20),
   @varcharmax nvarchar(20),
   @SEQ_PARENT nvarchar(20),
   @FK_MODULE_VIEW nvarchar(20),
   @FK_MODULE_VAL nvarchar(20)
AS
BEGIN
    DECLARE @p_tablename varchar(20), 
        @type varchar(20), 
        @FK_SQL_DATA nvarchar(max), 
        @FK_TABLE_NAME varchar(20), 
        @ALTER_TABLE_SQL nvarchar(max),
        @ALTER_TABLE_SQL_ADD_FK nvarchar(max),
        @FIELD_REF_SQL_DATA nvarchar(max)

    SELECT @p_tablename = TABLENAME FROM SD_TABLES WHERE VIEWNAME = @tablename

    SET @type = @datatype + @length

    if @datatype = 'TEST1'
    BEGIN
    --SQL HERE
    END

    if @datatype = 'TEST2'
    BEGIN
    --SQL HERE      
    END

    if @datatype = 'TEST3'
    BEGIN
    --SQL HERE
    END

    EXEC SD_CreateAllViewStatements
END

我可以考虑两种情况,为什么会发生这种情况:


在调用SD_CreateAllViewStatements之前主脚本崩溃。你可以添加简单的尝试。。。捕获构造以避免SP AddField崩溃。 在你的if中有一个return语句。。。开始需要删除的端块或需要重新设计SP AddField
在这两种情况下,脚本基本上不执行对SD_CreateAllViewStatements的调用。在所有其他情况下,必须执行SP SD_CreateAllViewStatements。

SD_CreateAllViewStatements做什么?您是否尝试在其中放入一些调试代码/打印行以查看它是否被调用?只需检查-在真实的脚本中,这些if语句以及END语句是否都有BEGIN语句。对不起,是的,有BEGIN语句。如果手动执行,SD_CreateAllViewStatements绝对可以正常工作。我认为可能存在时间问题,因为上面的实际SP需要在运行SD_CreateAllViewStatements之前完成,否则它将失败感谢您的回复。每个IF语句的最后一行执行以下操作:EXEC sp_executesql@FIELD_REF_SQL_DATA。奇怪的是,SD_CreateAllViewStatements似乎确实执行了,因为它基本上会删除一个视图并重新创建。视图将被删除,但不会重新创建。如果我手动执行SD_CreateAllViewStatements,它将重新创建视图。我上面的主存储过程对表进行了一些更改,这就是重新创建view语句的原因。好的,忽略这个问题。如果我从数据库中执行主存储过程,它可以正常工作。如果我使用我的应用程序,它无法完成执行SD_createAllViewStatement。在这种情况下,问题可能是超时-如果代码很重。默认超时设置为30秒。检查SP从Management Studio运行的时间以及应用程序中的超时设置。