2016-01-20 113 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

相關問題