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