您错过了@Count
作为sp_executesql
调用的一部分提供参数(请注意,在这种情况下,它也应该被标记OUTPUT
):
...
EXECUTE sp_executesql @SQL, N'@Count int OUTPUT', @Count OUTPUT
SELECT @Count
调用中的第二个参数sp_executesql
是查询参数定义,或者所谓的形式参数(在你的情况下有单个参数N'@Count int OUTPUT'
)。如果查询是参数化的,那么应该在后面(第三个和后续参数)是所谓的实际参数。
下面的示例可能会更好地解释:
-- sample query #1
-- will fail, because of query is pararmeterized,
-- and actual pararmeter is not provided
EXEC sp_executesql N'SELECT @Num', N'@Num int';
-- sample query #2
-- formal parameter is @Num of type int
-- actual parameter is literal constant 153
EXEC sp_executesql N'SELECT @Num', N'@Num int', 153;
-- sample query #3
-- formal parameter is @Num of type int
-- actual parameter is variable @p
DECLARE @p int;
SET @p = 1;
EXEC sp_executesql N'SELECT @Num', N'@Num int', @p;
-- sample query #4
DECLARE @p int;
SET @p = 15;
EXEC sp_executesql N'SELECT @Num=@Num*2', N'@Num int output', @p output
select @p;