在动态SQL中乘以值

时间:2016-02-05 12:56:43

标签: sql-server exec dynamic-sql execute

使用动态SQL我想在表中插入两列。将使用从另一个存储过程传入​​的两个参数计算第二列。我知道我可以使用sp_execute执行以下操作但是想知道我是否可以使用EXEC执行类似操作

   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执行此操作吗?以下似乎不起作用,乘法操作数需要是一个刺痛的字面值吗?

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

1 个答案:

答案 0 :(得分: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;