2016-01-20 33 views
0

我想在我的過程中使用參數變量exec()過程中的exec()函數中傳遞參數變量

下面是該過程:

CREATE PROCEDURE [dbo].[sp_CostBudgetedTabular](@start AS datetime) 
AS 
BEGIN 
    Exec('Declare @tempActual Table(MonthName nvarchar(MAX),Total float); 
    Declare @tempBudgeted Table(MonthName nvarchar(MAX),Total float); 

    insert into @tempBudgeted sp_CostBudgetedTabular @start 
    insert into @tempActual sp_CostActualTabular @start ') 

它引發錯誤:

消息102,級別15,狀態1,行20
附近有語法錯誤sp_CostBudgetedTabular「。

Msg 102,Level 15,State 1,Line 21
'sp_CostActualTabular'附近語法不正確。

sp_CostBudgetedTabularsp_CostActualTabular是其中取日期作爲參數

+0

邊注過程:[CREATE PROCEDURE](https://msdn.microsoft.com/en-us/library/ms187926.aspx ):「避免在命名過程中使用** sp _ **前綴,這個前綴被SQL Server用來指定系統過程」 –

+0

另外,你爲什麼要在完全靜態的字符串上執行'EXEC'?爲什麼不直接在這個過程中直接使用代碼? –

+0

@Damien_The_Unbeliever感謝您的建議,下次我將在創建過程時記住它。你能幫我解決我目前遇到的問題嗎? – Shahzad

回答

1
CREATE PROCEDURE [dbo].[sp_CostBudgetedTabular] 
(
    @start DATETIME 
) 
AS BEGIN 

    SET NOCOUNT ON 

    DECLARE @SQL NVARCHAR(MAX) 
    SET @SQL = ' 
    DECLARE @tempActual TABLE ([MonthName] NVARCHAR(100), Total FLOAT) 
    DECLARE @tempBudgeted TABLE ([MonthName] NVARCHAR(100), Total FLOAT) 

    INSERT INTO @tempBudgeted 
    EXEC dbo.sp_CostBudgetedTabular @start 

    INSERT INTO @tempActual 
    EXEC dbo.sp_CostActualTabular @start ' 

    EXEC sys.sp_executesql @SQL, N'@start DATETIME', @start = @start 

END