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

将tSQL语句字符串转换为最终值,tsql,sql-server-2012,Tsql,Sql Server 2012,我有一个类型为*NVARCHAR的列,它保存SQL语句片段,而不是最终值。例如,其中一个字段包含以下代码段: CAST(@originalValue * -1 AS INT) 我试图完成的是使用这些SQL代码片段插入存储过程代码中。为了验证功能,我创建了以下非常简单的示例,将整数值设置为(5),并在动态SQL语句中使用上述SQL代码段将该值(5)转换为(-5) 然而,我得到了一个错误。我尝试过几种不同的方法,但有些方法并不适用。谢谢您的帮助。有什么错误?您的@value值中有一个可疑星。错误是

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

CAST(@originalValue * -1 AS INT)
我试图完成的是使用这些SQL代码片段插入存储过程代码中。为了验证功能,我创建了以下非常简单的示例,将整数值设置为(5),并在动态SQL语句中使用上述SQL代码段将该值(5)转换为(-5)


然而,我得到了一个错误。我尝试过几种不同的方法,但有些方法并不适用。谢谢您的帮助。

有什么错误?您的
@value
值中有一个可疑星。错误是:Msg 137,级别15,状态2,第1行必须声明标量变量“@originalValue”,可疑星是数学运算符-乘法:)Doh!不知道我怎么会把它误读为一个错误:)你需要定义一个参数列表。不过我忘了怎么做了。例如谷歌,我不确定我是否理解。什么是“参数列表”?只有一个值。请解释一下。为了在动态语句中定义
@originalValue
,我的意思是。否则,SQL怎么知道这是什么意思?…嗯,我不确定在一些大型数据集更新下这将如何运行,但这是可行的。谢谢!。。。很抱歉,我没有早点谈到这个问题。您的解决方案的问题是@value声明在声明本身时就解决了,因此它永远不会作为“字符串”进入动态SQL。相反,它将作为缺少该点的先前解析值提供。谢谢。
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))
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))