存储过程output参数问题

下面的存储过程,ID1是同时作为输入输出参数的。

CREATE Procedure usp_test
 @ID1 int output,
 @ID int
AS

IF @ID1 = 0
BEGIN
 SELECT * FROM Customers
 SET @ID1 = 1
 end
ELSE
begin
 SELECT Employees.* FROM Employees
 SET @ID1 = 2
end
GO


通过查询分析器直接运行还是通过VS.NET都能正常运行,可是当用ado.net写一个程序调用时,就不一样了。设置ID1这个参数等于0根本没有用,从Profiler来看,ID1一上来就是1,IF那部分不会执行下去。
不过,如果将两个参数调整一下位置就可以了
CREATE Procedure usp_test
 @ID int,
 @ID1 int output
AS .....
有些奇怪,因无从下手找KB,不知道这个是不是ADO.NET的问题,还是其他问题

(1-15更新)

问题好像不是那么简单,今天无论调整成怎样都不行。后来又好了,但是不关次序的问题,而是与设置ParameterDirection.InputOutput还是ParameterDirection.Output有关。而且发现当是ParameterDirectioin.Output的时候,参数设置什么都没有用,都是NULL,存储过程改称

IF @ID1 = 0  OR @ID1 is NULL

就可以了

不过,即使设置了ID1=1也执行不了ELSE的内容,奇怪的问题。

你可能感兴趣的:(存储过程output参数问题)