×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

奇怪的SQL Server 2000问题

使用下面的语句执行存储过程GetVersionNumber会出错:
declare @P1 varchar(50)
set @P1=NULL
exec sp_executesql
N'exec GetVersionNumber', N'@HDID varchar(50),@Version varchar(50),@ReturnVersion varchar(50) output',
@HDID = '459545611', @Version = '4.36', @ReturnVersion = @P1 output
select @P1

错误描述:

Server: Msg 201, Level 16, State 3, Procedure GetVersionNumber, Line 0
Procedure 'GetVersionNumber' expects parameter '@HDID', which was not supplied

可参数@HDID明明在那里。

但使用下面的语句执行就没有错,可以得到正确结果,真是奇怪啊。莫非是Sql Server的Bug? 不幸的是我只能用上一种方法执行,应该是ADO.NET自动生成的。有没有办法?

declare @P1 varchar(50)
set @P1=NULL
exec GetVersionNumber @HDID = '459545611', @Version = '4.36', @ReturnVersion = @P1 output
select @P1
Report

Replies, comments and Discussions:

  • 工作学习 / IT技术讨论 / 奇怪的SQL Server 2000问题
    使用下面的语句执行存储过程GetVersionNumber会出错:
    declare @P1 varchar(50)
    set @P1=NULL
    exec sp_executesql
    N'exec GetVersionNumber', N'@HDID varchar(50),@Version varchar(50),@ReturnVersion varchar(50) output',
    @HDID = '459545611', @Version = '4.36', @ReturnVersion = @P1 output
    select @P1

    错误描述:

    Server: Msg 201, Level 16, State 3, Procedure GetVersionNumber, Line 0
    Procedure 'GetVersionNumber' expects parameter '@HDID', which was not supplied

    可参数@HDID明明在那里。

    但使用下面的语句执行就没有错,可以得到正确结果,真是奇怪啊。莫非是Sql Server的Bug? 不幸的是我只能用上一种方法执行,应该是ADO.NET自动生成的。有没有办法?

    declare @P1 varchar(50)
    set @P1=NULL
    exec GetVersionNumber @HDID = '459545611', @Version = '4.36', @ReturnVersion = @P1 output
    select @P1
    • 里面代码运行都是在查询分析器里进行的。
      • 终于搞明白了,如果ADO指定是存储过程,就会直接exec,如果不指定或指定是sql语句,就会使用sp_executesql ,可以优化执行速度. 但存储过程不能用sp_executesql 来执行