将变量作为参数传递给存储过程

时间:2016-01-20 15:23:22

标签: sql-server tsql stored-procedures

我有一个带有SELECT语句和两个参数的存储过程。我想从另一个声明了变量的存储过程调用该存储过程,并将此变量用作参数之一。

当我尝试这个时:

EXEC [dbo].[Testo] @cd_order = 23, @cd_substep = 33

它会返回一些行,但是当我尝试这个时:

set @temp_var1 = ( Select cd_substep FROM ....Where...)

EXEC [dbo].[Testo] @cd_order = 23, @cd_substep = @temp_var1

结果是空的。

该过程将填充表变量:

INSERT INTO @Var1Table EXEC [dbo].[Testo] 23, @cd_substep 

仅在我使用静态值时才有效。如何将变量用作参数?

2 个答案:

答案 0 :(得分:4)

这不是代码中的问题,因为我可以简单地复制你拥有的内容并且它有效:

DECLARE @return_value int
DECLARE @temp_var1 int

SET @temp_var1 = (SELECT 65)

EXEC    @return_value = [dbo].[GetRecordLog]
        @Action = N'All',
        @EntityID = 1,
        @RecordID = @temp_var1

SELECT  'Return Value' = @return_value

请注意我的@temp_var1的值为65.然后我得到与此匹配的行,我知道代码与您的代码不完全相同,但概念保持不变。问题不在于您的代码,而在于@temp_var1具有的值。

答案 1 :(得分:0)

你的代码可能有问题,但它有效,我同意@JonH,我也根据你对不同观点的解释做了类似的事情

USE tempdb
GO
IF OBJECT_ID(N'tempdb.dbo.#TempData') IS NULL
BEGIN
    CREATE TABLE #TempData
    (
    ID INT IDENTITY
    ,First_Name VARCHAR(100)
    ,Last_Name VARCHAR(100)
    ,RecordDate DATETIME
    )
END
GO
INSERT INTO #TempData (First_Name,Last_Name,RecordDate) VALUES ('Juan','Jose Calambuco',GETDATE())
INSERT INTO #TempData (First_Name,Last_Name,RecordDate) VALUES ('Carlos','Jose Calambuco',GETDATE())
INSERT INTO #TempData (First_Name,Last_Name,RecordDate) VALUES ('Arturo','Jose Calambuco',GETDATE())
INSERT INTO #TempData (First_Name,Last_Name,RecordDate) VALUES ('Fabian','Jose Calambuco',GETDATE())
INSERT INTO #TempData (First_Name,Last_Name,RecordDate) VALUES ('Pedro','Jose Calambuco',GETDATE())
GO
CREATE PROC #TestData
(
@IDTempData INT
)
AS
SELECT * FROM #TempData WHERE ID = @IDTempData
GO
CREATE PROC #TestData2
(
@IDTempData INT 
)
AS
EXEC #TestData @IDTempData
GO

DECLARE @Value INT = (SELECT TOP 1 ID FROM #TempData)
EXEC #TestData @Value

EXEC #TestData2 @Value

EXEC #TestData 3