日期:2014-05-17  浏览次数:20609 次

SQL2008中自定义函数,往表变量插值,后面调用出错?在线等大侠解答
下面是我自定义一个"流水号"函数,在外调用时直接赋值变量即可,但是调用时提示转换类型失败!




ALTER  FUNCTION dbo.fn_GetNewFlowNumber
(
@SheetTableName   varchar(50),
    --目标表
@SheetTableNO     varchar(50),
--目标字段
@SheetTableFields varchar(50)
    --前缀字段
)


/*获取一条新的单据流水号*/

RETURNS varchar(50)  AS  
BEGIN

--流水号前缀
declare @PrefixString varchar(50)


--流水号后缀数字的位数
declare @PostfixLength int  


--定义好当日单据所有的流水号数据表
declare @Table table
(
SheetNo varchar(50)
)


--取得单据的最后一条SheetNo
IF @SheetTableName IS NULL OR @SheetTableName='' OR @SheetTableName = 0
   return ''
ELSE 


BEGIN
        SET @PrefixString= @SheetTableFields
        SET @PostfixLength=4
        INSERT INTO @Table(SheetNo) SELECT @SheetTableNO FROM LOWER(@SheetTableName) WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL
    END

    RETURN ''



END



--SELECT  dbo.fn_GetNewFlowNumber('T_ERP_Warehouse','Warehouse','WH_No')



尝试把红色部分改为:

DECLARE @aa varchar(200)
SET @aa='insert into @Table(Sheetno) SELECT '+@SheetTableNo +' FROM '+@SheetTableName +' WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())= 0 OR CreateTime is NULL '

EXEC(@aa)


又提示@table未声明? 烦请大侠解答啊!
在线等!!

------解决方案--------------------
帮你改了一下,你试试,能创建成功不:
create  procedure dbo.proc_GetNewFlowNumber
(
@SheetTableName   varchar(50),
    --目标表
@SheetTableNO     varchar(50),
--目标字段
@SheetTableFields varchar(50),

@return varchar(50) out
    --前缀字段
)
as



/*获取一条新的单据流水号*/


BEGIN

--流水号前缀
declare @PrefixString varchar(50)


--流水号后缀数字的位数
declare @PostfixLength int  


--定义好当日单据所有的流水号数据表
declare @Table table
(
SheetNo varchar(50)
)


--取得单据的最后一条SheetNo
IF @SheetTableName IS NULL OR @She