老大来了
我的函数
/*==============================================================================
存储过程说明:
存储过程的输入参数:
存储过程的输入参数:
建立人:
建立时间:
修改人:
修改时间:
===============================================================================*/
CREATE FUNCTION ufn_GetFormNo
(
@Now datetime,
@FormType int
 )
RETURNS char(14) AS  
BEGIN 
declare @Sequence int
declare @CreateDate smalldatetime
declare @iCount int
declare @No char(14)
declare @order_No char(14)
set @No=''if @FormType=10 --酒店订单表
select top 1 @Sequence=isnull(right(order_No,6),1) ,@CreateDate = order_CreateTime from CBC_Order_Form_Main order by order_CreateTime descif datediff(day,@CreateDate,@Now)=0
begin
set @iCount = 6 - len(@Sequence)
set @No =convert(varchar,@Sequence)
while @iCount>0
begin
set @No = '0' + @No
set @iCount = @iCount -1
end
set @No =convert(varchar,@FormType)+convert(char(6),@Now,12) + @No
end
else
begin
set @No =convert(varchar,@FormType)+convert(char(6),@Now,12) + '000001'
end
return @No
END测试数据
declare @aaa int
set @aaa=10
create table #aa
(
id int,
sn char(14) default(dbo.ufn_GetFormNo(getdate(),10))
)
while @aaa>0
begin
insert #aa(id) values (@aaa)
set @aaa=@aaa-1
end
select * from #aa
drop table #aa结果
服务器: 消息 208,级别 16,状态 1,行 3
对象名 'dbo.ufn_GetFormNo' 无效。
服务器: 消息 1750,级别 16,状态 1,行 3
未能创建约束。请参阅前面的错误信息。

解决方案 »

  1.   

    函数的参数问题,不能用getdate()
      

  2.   

    不对,是我搞错了,是因为你创建的是临时表,临时表是创建在tempdb数据库中,你创建的函数在你的当前数据库中,不是在tempdb数据库中,所以对象无效,改成正式表就行了.
      

  3.   

    thx,这个错误你也能很快找到,哈哈