2016-02-05 30 views
0

使用動態SQL我想將兩列插入到表中。第二列將使用從另一個存儲過程傳入​​的兩個參數進行計算。我知道我可以做以下使用sp_execute但想知道如果我能做到使用類似剛剛EXEC在動態SQL中乘以數值

DECLARE @vsql nvarchar(max) 

    DECLARE @p1 numeric 
    SET @p1 = 5 

    SET @vsql = ' Select PORTFOLIO_CODE, (@p1 * @p1) as leverage 
    INTO greg 
    from ssc.slh 
    select * from greg' 

    Exec sp_executesql 
    @stmt = @vsql, 
    @params = N'@p1 as numeric', 
    @p1 = @p1 

我能做到這一點使用Exec的?以下似乎不起作用的乘法操作數是否需要成爲一個sting文字?

DECLARE @vsql爲nvarchar(最大)

DECLARE @p1 numeric 
    SET @p1 = 5 

    SET @vsql = ' Select PORTFOLIO_CODE, (' + @p1 * @p1 + ') as leverage 
    INTO greg 
    from ssc.slh 
    select * from greg' 

    Exec sp_executesql 
+0

你爲什麼要用動態sql? –

+0

它不起作用的原因是您需要將結果轉換爲(n)varchar(x)以便將其與其餘的結合起來 –

回答

1

爲什麼你需要動態SQL?你可以只使用該變量在查詢輸出

DECLARE @p1 numeric = 5; 

Select 
    PORTFOLIO_CODE, (@p1 * @p1) as leverage 
from ssc.slh 

編輯: 對於動態列映射。 @ p1和@ p2是你想要乘的列名嗎?

DECLARE 
    @p1 nvarchar(200) = 'myFirstColumnName', 
    @p2 nvarchar(200) = 'mySecondColumnName', 

DECLARE @vsql nvarchar(max) = 'SELECT PORTFOLIO_CODE, ([' + @p1 +'] * ['+ @p2 + ']) leverage from ssc.slh'; 
PRINT @vsql; 
Exec sp_executesql @vsql; 
+0

我現在遇到的問題是@ p1是一個字符串,它表示列名稱並且我想現在將該列名稱(字符串也是)與另一個存儲在p2中的列名稱相乘。當我試圖乘這兩列越來越像p1 * p2列(其中將包含數字)我得到以下錯誤'操作數數據類型nvarchar是無效的乘法運算符'任何建議? – maracuja