我有一个类型为* 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))
但是,我收到了一个错误。我试过几种不同的方法,但有些东西没有排队。谢谢你的帮助。
答案 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))