【问题标题】:TSQL having @varible in a SELECT statementTSQL 在 SELECT 语句中具有 @varible
【发布时间】:2017-05-11 20:33:09
【问题描述】:

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

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 应该是刚刚运行的查询。

我错过了什么?

【问题讨论】:

    标签: sql tsql sql-server-2014 concat


    【解决方案1】:

    你应该使用参数:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 1970-01-01
      • 2014-02-08
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多