2017-05-11 108 views
1

嘿,这里是我的代码,我现在有一个存储Proceedure:TSQL SELECT语句具有@varible

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

我错过了什么?

回答

3

你应该使用参数:

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

我不知道是什么@val3的确切定义或名称,所以你可能需要修改上面您所使用的实际变量,它的类型。

而且,您可能不希望在查询中出现@val3左右的双引号。事实上,我认为你根本不需要concat()