读书人

SQL2008中自定义函数往表变量插值

发布时间: 2013-12-11 16:44:13 作者: rapoo

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

读书人网 >SQL Server

热点推荐