ALTERing SQL server function



我试图更改以前编写的SQL server 2008函数,但我一直收到一堆错误代码。但是,修改后的查询应该是可以的,因为我可以将其作为查询单独运行。

更新查询:

ALTER FUNCTION [dbo].[list_acc]
(
  @ba_id int
)
RETURNS TABLE 
AS
RETURN 
(

    DECLARE @v1 varchar(40)
    @v1 varchar(40)
    SET @v1 = YEAR(GETDATE())
    SET @v1 += '/

    SELECT  BankingAccountStatementIdDW id ,
            StatementNumber nro ,
            CONVERT(nvarchar(10),StatementStartDate,104) startd,
            CONVERT(nvarchar(10),StatementEndDate,104) endd,
            StatementInitialBalance startm,
            StatementFinalBalance endm,
            StatementAvailableBalance inuse,
            CONVERT(nvarchar(10),DateCreated,104) made
    FROM Test.dbo.BankingAccountStatement bas
    WHERE bas.BankingAccountIdDW = @ba_id AND bas.StatementNumber <> @v1
)

您需要将DECLARE部分移动到函数体中。。。。

ALTER FUNCTION [dbo].[list_acc]
(
    @ba_id int
)
RETURNS TABLE 
AS
RETURN 
(
    DECLARE @v1 varchar(40)
    SET @v1 = CAST(YEAR(GETDATE()) AS VARCHAR(10)) + '/'
    .....

或者,由于您只使用where子句中的变量,因此可以去掉声明部分,只在where…中添加代码。。。

FROM Test.dbo.BankingAccountStatement bas
WHERE bas.BankingAccountIdDW = @ba_id 
AND bas.StatementNumber <> CAST(YEAR(GETDATE()) AS VARCHAR(10)) + '/'

查询应该如下所示。。。

ALTER FUNCTION [dbo].[list_acc] ( @ba_id INT )
RETURNS TABLE
AS
RETURN
    ( SELECT    BankingAccountStatementIdDW id
               ,StatementNumber nro
               ,CONVERT(NVARCHAR(10), StatementStartDate, 104) startd
               ,CONVERT(NVARCHAR(10), StatementEndDate, 104) endd
               ,StatementInitialBalance startm
               ,StatementFinalBalance endm
               ,StatementAvailableBalance inuse
               ,CONVERT(NVARCHAR(10), DateCreated, 104) made
      FROM      Test.dbo.BankingAccountStatement bas
      WHERE     bas.BankingAccountIdDW = @ba_id
                AND bas.StatementNumber <> CAST(YEAR(GETDATE()) AS VARCHAR(10))
                + '/'
    )

您必须纠正错误并执行它。

  1. 消息156,级别15,状态1,过程列表_acc,第9行关键字"DECLARE"附近的语法不正确

此错误是因为在函数参数中给定了declare关键字。

将代码更改为.

ALTER FUNCTION[dbo]。[list_acc](@ba_id int

)退货表作为返回(声明@v1 varchar(40)SET@v1=年份(GETDATE())设置@v1+='/'

选择BankingAccountStatementIdDW id,声明编号nro,CONVERT(nvarchar(10),StatementStartDate,104)已启动,CONVERT(nvarchar(10),StatementEndDate,104)制作,StatementInitialBalance startm,StatementFinalBalance endm,StatementAvailableBalance正在使用中,CONVERT(nvarchar(10),创建日期,104)muodostettuFROM Test.dbo.BankingAccountStatement bas基础位置。BankingAccountIdDW=@ba_id AND bas。StatementNumber<>@v1)

这样可以清除错误。

试试这个

不能在函数参数列表中声明变量

ALTER FUNCTION [dbo].[List_acc] (@ba_id INT)
RETURNS TABLE
AS
  BEGIN
      DECLARE @v1 VARCHAR(40)
      SET @v1 = CONVERT(VARCHAR(10), Year(Getdate()))
      SET @v1 += '/'
      RETURN
        (SELECT BankingAccountStatementIdDW                    id,
                StatementNumber                                nro,
                CONVERT(NVARCHAR(10), StatementStartDate, 104) startd,
                CONVERT(NVARCHAR(10), StatementEndDate, 104)   endd,
                StatementInitialBalance                        startm,
                StatementFinalBalance                          endm,
                StatementAvailableBalance                      inuse,
                CONVERT(NVARCHAR(10), DateCreated, 104)        made
         FROM   Test.dbo.BankingAccountStatement bas
         WHERE  bas.BankingAccountIdDW = @ba_id
                AND bas.StatementNumber <> @v1)
  END 

最新更新