将SQL语句字符串转换为最终值

时间:2014-10-09 22:21:06

标签: tsql sql-server-2012

我有一个类型为* NVARCHAR的列,其中包含SQL语句片段而不是最终值。例如,其中一个字段包含以下代码段:

CAST(@originalValue * -1 AS INT)

我想要完成的是将这些SQL代码段插入到后面的存储过程代码中。为了验证功能,我创建了以下非常简单的示例,将整数值设置为(5),并使用动态SQL语句中的上述SQL代码段将此值(5)反转为(-5)。

DECLARE @originalValue AS INT = 5
DECLARE @fianalValue AS INT
DECLARE @sql AS NVARCHAR(50)
DECLARE @value AS NVARCHAR(50) = 'CAST(@originalValue * -1 AS INT)'

SET @sql = 'SELECT @fianalValue = '+CAST(@value AS NVARCHAR(100))+''

exec sp_executesql @sql, N'@fianalValue INT OUTPUT', @fianalValue = @fianalValue OUTPUT

PRINT '@fianalValue: ' + CAST(@fianalValue AS VARCHAR(50))

但是,我收到了一个错误。我试过几种不同的方法,但有些东西没有排队。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

Try this

DECLARE @originalValue AS INT = 5
    DECLARE @fianalValue AS INT
    DECLARE @sql AS NVARCHAR(50)
    DECLARE @value AS NVARCHAR(50) = 'CAST('+convert(varchar(20),@originalValue)+' * -1 AS INT)'


    SET @sql = 'SELECT @fianalValue = '+CAST(@value AS NVARCHAR(100))+''

    exec sp_executesql @sql, N'@fianalValue INT OUTPUT', @fianalValue = @fianalValue OUTPUT

    PRINT '@fianalValue: ' + CAST(@fianalValue AS VARCHAR(50))