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