怎样在存储过程中调用自定义函数?

dahua1980 2005-08-08 07:57:50
下面是一存储过程:
CREATE PROCEDURE PickUpWHTableIndexInsert
(@BillOfLadingID char(14) output,
@PickDate smalldatetime,
@kind bit
)

AS INSERT INTO PickUpWHTableIndex
(
[fBillOfLadingID],
[fPickDate],
[fkind]
)

VALUES
(
/*@BillOfLadingID赋值该如何写?下面写法不对*/
select @BillOfLadingID=dbo.NewPickId(@kind)

@PickDate,
@kind
)

GO

该存储过程的功能是向表中插入一条记录,其中参数@BillOfLadingID的值是调用一自定义函数dbo.NewPickId(@kind),它的参数是这条记录的另一个字段,请问给@BillOfLadingID赋值该如何写?
(插入成功后,还要将@BillOfLadingID读出)谢谢!!!!!!!!!
...全文
371 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahua1980 2005-08-08
  • 打赏
  • 举报
回复
执行一下 select dbo.NewPickID()
得到: HS/G0000001

我是将它作为主键的,不为NULL
vivianfdlpw 2005-08-08
  • 打赏
  • 举报
回复
列 'fBillOfLadingID', 'XXDB.dbo.PickUpWHTableIndex';该列不允许空值
=======================>
你没有为fBillOfLadingID,PickUpWHTableIndex字段提供值,但是设计表的时候又不允许他们为null

rivery 2005-08-08
  • 打赏
  • 举报
回复
顺便提一下
@BillOfLadingID char(14)
RETURNS varchar(11)
注意这两个的长度要对称的。
rivery 2005-08-08
  • 打赏
  • 举报
回复
二楼的不用values(),用select也可以的。
因为你需要output,所以就一次在前面给@BillOfLadingID赋值了。
你这个函数上次好像提出来过,大家给了很多好的答案,现在感觉好像还是原来的那个。
你执行一下
select dbo.NewPickID()
看结果是什么。
dahua1980 2005-08-08
  • 打赏
  • 举报
回复
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 desc

if @@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教我的。但人有上面的错误提示.怎么回事?
点点星灯 2005-08-08
  • 打赏
  • 举报
回复
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
rivery 2005-08-08
  • 打赏
  • 举报
回复
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

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧