TSQL在SELECT语句中包含@varible

时间:2017-05-11 20:33:10

标签: sql tsql sql-server-2014 concat

嘿,这里是我目前在存储过程中的代码:

DECLARE @SQL NVARCHAR(MAX);
[more code here.....]

SET @SQL = @ParameterSQL;
[more code here.....]

SET @SQL = 
     'SELECT 
        CONCAT(
                OBJECT_NAME(@@PROCID), 
                LEFT(modify_date, 11), 
                '' ('', 
                DATEDIFF(day, LEFT(modify_date, 11), GETDATE()), 
                '' days ago)''
              ) AS CurrentVersion,
        CONCAT(
                ''@val3'',
                ''''
              ) AS calledQuery 
      FROM 
        sys.objects
      WHERE 
        type = ''P''
      AND 
        name = ''' + @ver + '''';

EXECUTE sp_executesql @SQL;

没有错误,但在输出中它只显示:

_______________________________________
|CurrentVersion           |calledQuery|
|-------------------------|-----------|
|May 11 2017 (0 days ago) |@val3      |

所以@ val3应该是刚刚运行的查询。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您应该使用参数:

EXECUTE sp_executesql @SQL, N'@val3 nvarchar(max)', @val3 = @val3;

我不知道@val3的确切定义或名称,因此您可能需要针对您使用的实际变量及其类型修改上述内容。

并且,您可能不希望查询中的@val3周围有双引号。事实上,我认为你根本不想要concat()