2012-07-10 20 views
0

在SQL Server中,我有一個接受日期參數的存儲過程。該日期參數然後傳遞給另一個存儲過程。但是,第二個存儲過程參數被命名爲第一個參數。然後我需要我有2個不同的標量變量:將標量引用傳遞給另一個標量

DECLARE @date date, @sql varchar(100); 

SET @date = '2012-07-01'; 
SELECT @sql = ('EXEC pStoredprocedure @date = '''[email protected]+'''') 

我需要@sql標包含這個文本,以便存儲過程可以調用其他存儲過程:

EXEC pStoredprocedure @date = '2012-07-01'

但是,當我運行上面我的代碼,我得到這個錯誤:

Msg 402, Level 16, State 1, Line 4 The data types varchar and date are incompatible in the add operator.

這幾乎就像我需要逃離@date運營商。這可以做到嗎?

附註:是的,我試圖動態傳遞一些變量。我明白這樣做的危險,但這樣做是非常簡單的...

+1

欣賞邊注:) – LittleBobbyTables 2012-07-10 20:38:21

回答

2

日期變量正在使用字符串連接,所以它應該被視爲一個字符串,要麼通過它的聲明,轉換函數,或者演員。我嘗試這樣做:

DECLARE @date varchar(20), @sql varchar(100); 
SET @date = '2012-07-01'; 
SELECT @sql = ('EXEC pStoredprocedure @date = ''' + @date + '''') 

PRINT @sql 

,並得到這個:

EXEC pStoredprocedure @date = '2012-07-01' 

我堅持2005年,所以我沒有日期數據類型,但是當我試圖用日期時間,我得到這個錯誤:

Msg 241, Level 16, State 1, Line 4 Conversion failed when converting datetime from character string.

您也可以嘗試

DECLARE @date datetime, @sql varchar(100); 
SET @date = '2012-07-01'; 
SELECT @sql = ('EXEC pStoredprocedure @date = ''' + CONVERT(varchar(20), @date, 102) + '''') 
PRINT @SQL; 

並獲得

EXEC pStoredprocedure @date = '2012.07.01' 
+0

非常棘手......感謝您的幫助。 – mikebmassey 2012-07-10 21:19:28