2014-07-02 100 views
0

我正在向SQL存儲過程發送2個參數。它可以工作,但是當我嘗試連接一個局部變量時,它不會。將局部變量連接到參數

這工作:

exec DeansSMSDB.dbo.ADD_SMS_InQueue @CellNo, 'Dear customer, Your complaint has been registered and your complaint no. is' 

但這並不:

exec DeansSMSDB.dbo.ADD_SMS_InQueue @CellNo, 'Dear customer, Your complaint has been registered and your complaint no. is' + @ComplaintID 

我需要連接@ComplaintID,但如何?

+0

如果您查看['EXECUTE'](http://msdn.microsoft.com/en-gb/library/ms188332.aspx)的語法,您會看到您可以提供*值*或a *變量*。什麼不是(如果你試圖允許的話)會是*表達式*。 –

回答

2

創建另一個變量:

declare @arg varchar(8000) = 'Dear customer, Your complaint has been registered and your complaint no. is' + cast(@ComplaintID as varchar(255); 

exec DeansSMSDB.dbo.ADD_SMS_InQueue @CellNo, @arg; 

注意,如果@ComplaintId是數字,你需要將其轉換爲一個字符串使用+運營商作爲一個字符串連接運算符。

0

您可以嘗試兩步法,將執行結果轉儲到小型@T臨時表中。然後執行從@T快速選擇與串聯

  1. 創建表的TableX(INPUT_FIELD_NAME VARCHAR(20)NULL, output_field_name VARCHAR(20)NULL)

  2. 插入TableX的值(」地址, '地址')

  3. 創建過程testP從TableX的 選擇INPUT_FIELD_NAME其中output_field_name = '地址'

  4. 聲明@T表(F1 VARCHAR(20)) DECLARE @v VARCHAR(10)= '我的'

  5. 插入@T EXEC testP

  6. 從選擇@v + '' + F1 @ T