Sql server 将参数传递给嵌套过程或创建临时表,并检查表是否存在

Sql server 将参数传递给嵌套过程或创建临时表,并检查表是否存在,sql-server,stored-procedures,Sql Server,Stored Procedures,我有以下存储过程结构: exec A -> exec B -> exec C -> exec D 其中存储过程A调用存储过程B,B调用C,C调用D 我需要在存储过程D中根据存储过程a中确定的条件发生特殊行为。当然,一个选项是将param从a传递到B,然后从B传递到C,然后从C传递到D,但我想知道是否可以在执行a之前创建一个临时表,然后,当我在存储过程D中时,我可以检查临时表是否存在,并基于此执行我的逻辑 编辑:我知道,如果从不同的过程调用proc D,条件将被视为不存在。我还

我有以下存储过程结构:

exec A -> exec B -> exec C -> exec D
其中存储过程A调用存储过程B,B调用C,C调用D

我需要在存储过程D中根据存储过程a中确定的条件发生特殊行为。当然,一个选项是将param从a传递到B,然后从B传递到C,然后从C传递到D,但我想知道是否可以在执行a之前创建一个临时表,然后,当我在存储过程D中时,我可以检查临时表是否存在,并基于此执行我的逻辑

编辑:我知道,如果从不同的过程调用proc D,条件将被视为不存在。我还知道临时表名称可能与另一个同名临时表冲突。除此之外

执行后续解决方案是否有任何不必要的副作用?

临时表或(#表)应具有会话的生命周期。在您描述的情况下,您应该能够在PROC A中创建#表,并在PROC D中引用它,而无需任何特殊考虑


请注意,如果您采用这种方法,您将在PROC D和PROC a之间创建一个直接依赖关系,因为现在您必须调用PROC a来创建在PROC D上使用的临时表。如果您同意,请继续。

我通常使用一个持久的[Params]表。我有以下程序:

CREATE OR ALTER PROCEDURE SetParam @name VarChar(20), @value VarChar(50) AS BEGIN
    -- I don't like MERGE, but it could be used here as well.
    BEGIN TRY
        INSERT INTO [Params] ([Name], [Value]) 
        VALUES (@name, @value)
    END TRY
    BEGIN CATCH
        UPDATE [Params] SET [Value] = @Value
        WHERE [Name] = @name
    END CATCH
END
GO
CREATE OR ALTER PROCEDURE GetParam @name VarChar(20), @value VarChar(50) OutPut AS BEGIN
    SET @value = NULL
    -- Try - Catch could be here as well
    SELECT @value FROM [Params] WHERE [Name]=@name
END
GO

-- In A
EXEC SetParam 'Param','Value'

-- In D
DECLARE @ParamValue Int
EXEC GetParam 'ParamName', @ParamValue OutPut