2016-01-20 114 views
0

我有一个带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 

当我使用一个静态值,它的工作而已。我如何使用变量作为参数?

+3

是什么当您使用select语句运行时,temp_var1上的值是多少?由于没有太多细节,因此在这里很难提供帮助。作为一个便笺,你应该避免在你的过程中使用sp_前缀的习惯。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

+0

Sp_prefix不是真名,但是谢谢 – Icaroo

+0

@lcaroo他说不要使用sp来启动存储过程的名称。你明确拥有sp_testo。 – JonH

回答

3

这是不是在你的代码中的问题,因为我可以简单地复制你有什么,它的工作原理:

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具有的值相关。

+0

你是对的!我的坏...谢谢 – Icaroo

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

相关问题