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

SQL2008中自定义函数,往表变量插值,后面调用出错?大侠解答

2013-12-11 
SQL2008中自定义函数,往表变量插值,后面调用出错?在线等大侠解答下面是我自定义一个流水号函数,在外调用

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 @SheetTableName='' OR @SheetTableName = 0
   return ''
ELSE 


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


END
go

热点排行