CREATE PROCEDURE  PickUpWHTableIndexInsert
(@BillOfLadingID   char(14) output,
 @PickDate   smalldatetime,
@kind  bit
)AS 
select @BillOfLadingID=dbo.NewPickId(@kind)INSERT INTO   PickUpWHTableIndex

[fBillOfLadingID], 
[fPickDate],
[fkind]
 ) 
 
VALUES 
(
@BillOfLadingID,
@PickDate,
@kind
)GO

解决方案 »

  1.   

    CREATE PROCEDURE  PickUpWHTableIndexInsert
    (@BillOfLadingID   char(14) output,
     @PickDate   smalldatetime,
    @kind  bit
    )AS INSERT INTO   PickUpWHTableIndex

    [fBillOfLadingID], 
    [fPickDate],
    [fkind]
     ) 
     
    VALUES 
    (
    /*@BillOfLadingID赋值该如何写?下面写法不对*/
    dbo.NewPickId(@kind)                                --不要select @BillOfLadingID=@PickDate,
    @kind
    )GO
      

  2.   

    rivery 写的没有语法上的错误,但操作是有错误信息:无法将 NULL 值插入列 'fBillOfLadingID', 'XXDB.dbo.PickUpWHTableIndex';该列不允许空值。INSERT 失败。语句已终止。我为了验证将dbo.NewPickId(@kind)简化,不要参数,改为CREATE FUNCTION NewPickID()  
    RETURNS varchar(11) AS  
    BEGIN 
    declare @id varchar(11) , @i  int/* 找出目前最大的编号*/
    select top 1 @id = fBillOfLadingID  from  PickUpWHTableIndex where fKind=1 Order by fBillOfLadingID descif @@Rowcount = 0  /*如果时第一条记录*/
        return  'HS/G0000001'
    set @i  = cast(right(@id,7) as int ) +1
    set @id = cast( @i as varchar)return 'HS/G' + Replicate('0', 7-len(@id)) + @id
    END 函数没有错误,这也是rivery教我的。但人有上面的错误提示.怎么回事?
      

  3.   

    二楼的不用values(),用select也可以的。
    因为你需要output,所以就一次在前面给@BillOfLadingID赋值了。
    你这个函数上次好像提出来过,大家给了很多好的答案,现在感觉好像还是原来的那个。
    你执行一下
    select dbo.NewPickID()
    看结果是什么。
      

  4.   

    顺便提一下
    @BillOfLadingID   char(14)
    RETURNS varchar(11) 
    注意这两个的长度要对称的。
      

  5.   

    列 'fBillOfLadingID', 'XXDB.dbo.PickUpWHTableIndex';该列不允许空值
    =======================>
    你没有为fBillOfLadingID,PickUpWHTableIndex字段提供值,但是设计表的时候又不允许他们为null
      

  6.   

    执行一下 select dbo.NewPickID()
    得到: HS/G0000001我是将它作为主键的,不为NULL