首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-01-21 
关于一个存储过程的一些不解CREATE PROCEDURE P_SP_SparepartsBillAgencySaleOut_Add--region 参数定义@Op

关于一个存储过程的一些不解
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这个参数

热点排行