2

我有以下 SQL:

DECLARE @SQL NVARCHAR(500)
DECLARE @Count INT

SET @SQL = 'SELECT @Count = COUNT(*) FROM customers WHERE lastname = ''alex'''

print @sql
EXECUTE sp_executesql @SQL, N'@Count int OUTPUT'
SELECT @Count

当我运行它时,我收到以下错误。知道我做错了什么吗?

消息 8178,级别 16,状态 1,行 1
参数化查询 '(@Count int OUTPUT)SELECT @Count = COUNT(*) FROM customers WHERE' 需要参数 '@Count',但未提供该参数。

4

1 回答 1

3

您错过了@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;
于 2013-09-12T20:45:48.303 回答