嘿,这里是我目前在存储过程中的代码:
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应该是刚刚运行的查询。
我错过了什么?
答案 0 :(得分:3)
您应该使用参数:
EXECUTE sp_executesql @SQL, N'@val3 nvarchar(max)', @val3 = @val3;
我不知道@val3
的确切定义或名称,因此您可能需要针对您使用的实际变量及其类型修改上述内容。
并且,您可能不希望查询中的@val3
周围有双引号。事实上,我认为你根本不想要concat()
: