【问题标题】:dynamic query returning parameter giving hard time动态查询返回参数很难
【发布时间】:2013-09-12 20:34:44
【问题描述】:

我有以下 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”,但未提供该参数。

【问题讨论】:

    标签: sql-server-2008 tsql


    【解决方案1】:

    您错过了将@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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多