我试图更改以前编写的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))
+ '/'
)
您必须纠正错误并执行它。
- 消息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