在虚拟表错误中使用Sql函数
Erorr消息 Msg 319,15级,状态1,程序Get_LogoFaturaIskonto,第11行在虚拟表错误中使用Sql函数,sql,sql-server,Sql,Sql Server,Erorr消息 Msg 319,15级,状态1,程序Get_LogoFaturaIskonto,第11行 关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一语句必须以分号终止。至少在缺少分号时: CREATE FUNCTION dbo.Get_LogoFaturaIskonto ( @InvoiceRef int = 0, @ParentlnRef int = 0,
关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一语句必须以分号终止。至少在缺少分号时:
CREATE FUNCTION dbo.Get_LogoFaturaIskonto (
@InvoiceRef int = 0,
@ParentlnRef int = 0,
@Rownumber int = 0
)
RETURNS decimal(18,2)
AS
BEGIN
DECLARE @VALUE decimal(18,2)
WITH NEWTABLE AS
(SELECT ROW_NUMBER() OVER(ORDER BY LOGICALREF ASC) AS ROWNUMBER#
,DISCPER,LOGICALREF,INVOICEREF,PARENTLNREF FROM dbo.LG_002_01_STLINE
WHERE
INVOICEREF = @InvoiceRef AND PARENTLNREF = @ParentlnRef AND LINETYPE = 2)
SELECT @VALUE = (SELECT * FROM NEWTABLE WHERE ROWNUMBER = @Rownumber)
RETURN ISNULL(@VALUE,0)
END
错误消息是自解释的,即使错误消息中建议了解决方案,您尝试过吗?顺便说一下,
SELECT@VALUE=(SELECT*FROM…
也会给出错误,因为NEWTABLE
包含多个列。
CREATE FUNCTION dbo.Get_LogoFaturaIskonto (
@InvoiceRef int = 0,
@ParentlnRef int = 0,
@Rownumber int = 0
)
RETURNS decimal(18,2)
AS
BEGIN
DECLARE @VALUE decimal(18,2);
WITH NEWTABLE AS
(SELECT ROW_NUMBER() OVER(ORDER BY LOGICALREF ASC) AS ROWNUMBER#
,DISCPER,LOGICALREF,INVOICEREF,PARENTLNREF FROM dbo.LG_002_01_STLINE
WHERE
INVOICEREF = @InvoiceRef AND PARENTLNREF = @ParentlnRef AND LINETYPE = 2)
SELECT @VALUE = (SELECT * FROM NEWTABLE WHERE ROWNUMBER = @Rownumber)
RETURN ISNULL(@VALUE,0)
END