DECLARE @a NVARCHAR(10) ,
@b NVARCHAR(100)
SET @a = 'value'
SET @b = ' PRINT @a '
EXEC sp_executesql @b
我想结果:'价值'
但我收到错误必须声明标量变量“@a”
我需要从SQL中记录名为SP的参数
我需要这个,因为在SP中我创建了来自INFORMATION_SCHEMA.PARAMETERS的dinamic查询
我的程序:
ALTER PROCEDURE marianTest
@a INT,
@b NVARCHAR(121)
AS
BEGIN
DECLARE @query NVARCHAR(max)
SET @query = dbo.ufn_admin_Ex(cast(OBJECT_NAME(@@PROCID) AS nvarchar(100)))
EXECUTE sp_executesql @query
其中@query是这样的:
declare @callSP nvarchar(max) =
'DECLARE @a int = ' + CASE WHEN @a IS NULL THEN 'NULL' ELSE convert(nvarchar(15),@a) END + CHAR(13)
+', @b nvarchar(121) = ' + CASE WHEN @b IS NULL THEN 'NULL' ELSE + '''' + @b+ '''' END + CHAR(13)
EXECUTE [dbo].[usp_admin_traceError] @callSp
感谢
玛丽安
答案 0 :(得分:3)
我相信这就是你要找的东西:
DECLARE @a NVARCHAR(10) , @b NVARCHAR(100)
SET @a = 'value'
SET @b = ' PRINT @a '
EXEC sp_executesql @b, N'@a nvarchar(10)', @a
结果:
value
答案 1 :(得分:2)
@b
无法神奇地看到@a
。
在exec之前尝试:
SET @b = 'PRINT ''' + @a + ''';
或者您可以这样使用sp_executesql
:
DECLARE @b NVARCHAR(100);
SET @b = N'PRINT @a';
EXEC sp_executesql @b, N'@a NVARCHAR(10)', @a;
答案 2 :(得分:2)
答案 3 :(得分:1)
如果要在动态SQL中使用参数/变量,则应使用带参数的sp_executesql
。有关动态SQL的精彩介绍,请参阅The Curse and Blessings of Dynamic SQL。