检索包含变量的文本并将值与其关联

时间:2014-06-16 10:33:56

标签: sql sql-server tsql

我认为这是一个非常奇怪的问题,但无论如何我都会尝试;这里的情景:

  1. 包含2列的表(id int,text nvarchar(max))

  2. 一个文本字段的值定义如下

    'Value of the variable is ' + @var

  3. 然后我执行这部分代码

    DECLARE @var INT = 100 ,@text NVARCHAR(MAX)

    SELECT @text = text FROM tbl WHERE id = 1

    SELECT @text

  4. 这是我存储在表中的输出“'变量的值是'+ @var';我的问题如下,是否有任何方法可以重新解释/解析@text变量中的字符串,就像它一样:

    SET @text = 'Value of the variable is ' + @var

    SELECT @text

    因此输出将是“变量的值为100”。

    感谢您提供任何有用的建议,

    F。

3 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

select replace(@text, '@var', @var)

我无法判断+是否在字符串中。当我这样做时,字符串看起来像:

SET @text = 'Value of the variable is @var';

变量直接替换。

答案 1 :(得分:0)

您可以使用replace方法替换字符串中的值:

declare @val int = 100
declare @str nvarchar(100) = '''Value of the variable is'' + @var'

-- output string as it is
select @str as output

-- replace the @var
select replace(@str,'@var',cast(@val as nvarchar(10))) as output

你可以通过删除引号和其他噪音来整理它

-- replace the variable
set @str = replace(@str,'@var',cast(@val as nvarchar(10)))

-- remove quotes
set @str = replace(@str,'''','')

-- remove +
select replace(@str,'+ ','') as output

你可以将这些组合成一个单独的调用,有一些丑陋的sql:

-- roll them in to a single replace 
select replace(
               replace(
                       replace(@str,'@var',cast(@val as nvarchar(10))),
                       '''',''),
               '+ ','') as output

答案 2 :(得分:0)

您也可以使用动态代码:

DECLARE @text NVARCHAR(200)= '''Value of the variable is ''  + @var';
DECLARE @var NVARCHAR(10) = 100

DECLARE @results NVARCHAR(300) = '';

--Prepare dynamic sql
DECLARE @sql NVARCHAR(MAX)= 'SELECT @results = ' + @text

EXEC sp_executesql @sql, N' @var NVARCHAR(10), @results VARCHAR(MAX) OUTPUT', @var=@var, @results=@results OUTPUT;

PRINT @results;