2012-08-17 106 views
16

這裏的第一個問題如下。我寫了下面的代碼,一切工作正常:如何在Transact-SQL中設置參數時連接字符串

DECLARE @subject NVARCHAR(100) 
SET @subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107) 
SELECT @subject 

結果:08月17執行報告,2012

而是試圖串連以前的字符串,同時設置msdb.dbo.sp_send_dbmail過程的參數時,它失敗

EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX', 
@recipients='[email protected]', 
@subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107), 
@body= @tableHTML, 
@body_format = 'HTML'; 

我知道我可以聲明,併發送一個變量參數,但我想明白爲什麼它直接在參數級聯時失敗。感謝您的時間和知識

回答

23

T-SQL存儲過程的參數值不能是表達式。他們需要是一個常數或一個變量。

MSDN - Specify Parameters

與過程調用中提供的參數值必須是常量 或變量;函數名稱不能用作參數值。 變量可以是用戶定義的或系統變量,如@@ spid。

+2

謝謝,這是我一直在尋找。 – ChuyTM 2012-08-18 11:10:23

+0

無賴..但謝謝。 – Brian 2015-09-01 09:29:44

3

你需要做的:

DECLARE @Sub nvarchar(100); 
SET @Sub = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107); 
EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX', 
@recipients='[email protected]', 
@subject = @Sub, 
@body= @tableHTML, 
@body_format = 'HTML'; 
+1

謝謝,我確實知道傳遞一個變量有效,但我不明白爲什麼。 – ChuyTM 2012-08-18 11:11:51

相關問題