【问题标题】:Using Sql Function in virtual table error在虚拟表错误中使用 Sql 函数
【发布时间】:2018-07-02 13:32:04
【问题描述】:
        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

错误信息

消息 319,级别 15,状态 1,过程 Get_LogoFaturaIskonto,第 11 行 关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。

【问题讨论】:

  • 错误信息一目了然
  • 连错误信息中都提示了解决方法,你试过了吗?
  • 顺便说一下,SELECT @VALUE = (SELECT * FROM... 也会报错,因为NEWTABLE 包含多个列。

标签: sql sql-server


【解决方案1】:

至少缺少分号:

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

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2014-06-23
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多