读书人

关于一个存储过程的一些纳闷

发布时间: 2013-01-21 10:15:39 作者: rapoo

关于一个存储过程的一些不解
CREATE PROCEDURE P_SP_SparepartsBillAgencySaleOut_Add
--region 参数定义
@OperatorPointCode VARCHAR(32) = NULL OUTPUT, -- 操作者所在网点号
@PointCode VARCHAR(32)= NULL OUTPUT,
@BillCode VARCHAR(32)= NULL OUTPUT,
@BillType VARCHAR(32) OUTPUT,
@channel varchar(64)=NULL,
@ReturnWay VARCHAR(32)= NULL,
@BillDT DATETIME OUTPUT,
@OperateDT DATETIME,
@CustomerID VARCHAR(32) OUTPUT,
@BillOperatorName VARCHAR(32),
@SparepartsOperatorName VARCHAR(32)= NULL,
@SellerName VARCHAR(32)= NULL,
@ChalkitupFlag INTEGER ,
@ExternID1 VARCHAR(32)= NULL OUTPUT,
@ExternID2 VARCHAR(32)= NULL OUTPUT,
@TransportFee NUMERIC(15,5)= NULL,
@Memory VARCHAR(64)= NULL,
@ProfitCenterNo VARCHAR(32) = NULL,--维修利润中心
@ProfitCenterNoEx VARCHAR(32) = NULL,--后服务利润中心
@VoucherAmount VARCHAR(32) = NULL,--附件张数
@Discount NUMERIC(6,4)= NULL,
@TransportWay VARCHAR(32),
@IsSaleOut VARCHAR(32) = NULL,
@OperatorCode VARCHAR(32) = NULL OUTPUT,
@BillTypeModifyFlag VARCHAR(32) = NULL OUTPUT, -- 维修出库的凭证修正标志 1:修改维修出库凭证 其他: 非维修出库凭证修正
@GiftOrDecoratingRemark VARCHAR(32) = NULL, --装潢备注
@SaleBillCode VARCHAR(32) = NULL OUTPUT, --整车销售单凭证号
@PromotionsName VARCHAR(32)=NULL, --促销员
@DeliveryOrder VARCHAR(32)=NULL,--送货单号(供应商送货单据号) 2012-6-1 肖建鹏添加
@CorrespondBillCode VARCHAR(32)=NULL, -- 对应单号2012/7/27 白亚洲
@PropertyType INT = 0 OUTPUT,
@BillCodeIP1 VARCHAR(32)=NULL OUTPUT, --从入库单选择的 入库单号
@CHName VARCHAR(32) = NULL ,
@Mobile VARCHAR(32)=NULL , --销售出库,客户手机号
@CustomerTypeFlag INT =0,
@SparepartsCostBalanceNUMERIC(12,5)= NULL,
@SparepartsSaleBalanceNUMERIC(12,5)= NULL,
@GoodsCostBalanceNUMERIC(12,5)= NULL,
@GoodsSaleBalanceNUMERIC(12,5)= NULL,
@DepartmentVARCHAR(32)= NULL
--endregion 参数定义
AS
BEGIN
DECLARE @Ret INT
EXEC @Ret=P_SparepartsBill_Add
@OperatorPointCode = @OperatorPointCode OUT,
@PointCode =@PointCode OUT,
@BillCode =@BillCode OUT,
@BillType =@BillType,
@channel = @channel ,
@ReturnWay = @ReturnWay,
@BillDT = @BillDT OUT,
@OperateDT = @OperateDT,
@CustomerID= @CustomerID OUT,
@BillOperatorName =@BillOperatorName,
@SparepartsOperatorName=@SparepartsOperatorName,


@SellerName = @SellerName,
@ChalkitupFlag =@ChalkitupFlag,
@ExternID1 =@ExternID1 OUT,
@ExternID2 =@ExternID2 OUT,
@TransportFee =@TransportFee,
@Memory =@Memory ,
@ProfitCenterNo =@ProfitCenterNo,
@ProfitCenterNoEx =@ProfitCenterNoEx,
@VoucherAmount=@VoucherAmount,
@Discount =@Discount,
@TransportWay =@TransportWay,
@IsSaleOut =@IsSaleOut,
@OperatorCode =@OperatorCode OUT,
@BillTypeModifyFlag =@BillTypeModifyFlag OUT,

@GiftOrDecoratingRemark =@GiftOrDecoratingRemark,
@SaleBillCode=@SaleBillCode OUT,
@PromotionsName =@PromotionsName,
@DeliveryOrder =@DeliveryOrder,
@CorrespondBillCode =@CorrespondBillCode,
@PropertyType = @PropertyType OUT,
@BillCodeIP1 = @BillCodeIP1 OUT,
@CHName =@CHName ,
@Mobile=@Mobile,
@CustomerTypeFlag=@CustomerTypeFlag,
@SparepartsCostBalance=@SparepartsCostBalance,
@SparepartsSaleBalance=@SparepartsSaleBalance,
@GoodsCostBalance=@GoodsCostBalance,
@GoodsSaleBalance=@GoodsSaleBalance,
@Department=@Department

IF @Ret <>0
Return @Ret
END

像这样的存储过程,在刚开始声明变量的时候有的参数用到OUTPUT,在执行P_SparepartsBill_Add这个存储过程的时候,用到的变量对应的参数又用到OUT,我不太明白这个OUTPUT和OUT到底有什么作用,在存储过程中又有什么意义?请高手们帮助。。谢谢了 存储
[解决办法]
没有区别

他这里是存储过程调用存储过程,被调用的存储过程需要output的参数,他就把参数加了个out传递
你把;里面的out改为output 也一样,不会报错,我试了,不过我没有用过out

CREATE PROCEDURE usp_Test1
-- Add the parameters for the stored procedure here
@id varchar(50) output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
select @id=COUNT(1) from ta;

END
GO
--执行结果一样
declare @i varchar(50)
exec usp_Test1 @i output
print @i

--执行结果一样
declare @i varchar(50)
exec usp_Test1 @i out
print @i


[解决办法]
OUT[PUT] 指示参数是输出参数。此选项的值可以返回给调用 EXECUTE 的语句。使用 OUTPUT 参数将值返回给过程的调用方
put关键字可选;执行存储过程时,将存储过程中的某个值赋值给out参数,传递给存储过程的调用方,即外部的out参数来接收
[解决办法]
output的参数是输出参数,执行完了存储过程之后,这个参数的值会发生变化 不能理解为return,如果要类比,你可以理解为ref或者Out
也就是
在执行存储过程前先声明output参数的变量,然后通过执行存储过程中的语句得到值来赋给此变量,从而在以后的代码段中可以使用此变量
[解决办法]
put是可选关键,也就是out=output,没什么区别
他不是要传入,而是要传出
EXEC P_SparepartsBill_Add
@OperatorPointCode = @OperatorPointCode OUT
这是要把存储过程P_SparepartsBill_Add 中的@OperatorPointCode参数传递给外面的
@OperatorPointCode这个参数

读书人网 >SQL Server

热点推荐