微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用功能填充表格

如何解决用功能填充表格

我创建表并想用功能数据填充该表,这就是表的代码

CREATE TABLE dbo.CustomerReportLogs1 (
    ID int IDENTITY (1,1) NOT NULL,CustomerId int NOT NULL,validFrom date NOT NULL,ValidTo date NOT NULL,EmployeeID int NOT NULL,CONSTRAINT PK_ID_CustomerReportLogs1 PRIMARY KEY CLUSTERED (
    ID ASC
    ))
    Go

因此,下一步应使用过程中的数据填充表。因此,我首先进行查询,以查看此功能是否正常工作,然后继续执行过程。下面您将看到查询的样子

CREATE OR  ALTER FUNCTION dbo.fn_Home_1 (@CustomerId int,@validFrom date,@ValidTo date,@EmployeeId int)
RETURNS @ResultSet table (CustomerFullName NVARCHAR(100),LocationName NVARCHAR(100),Amount decimal(18,2),Currency NVARCHAR(100),EmployeeId int)
AS
BEGIN
INSERT INTO @ResultSet(CustomerFullName,LocationName,Amount,Currency,EmployeeId)
SELECT  CONCAT(c.FirstName,' ',c.LastName) AS CustomerFullName,lo.Name as LocationName,acd.Amount,cu.Name as Currency,acc.EmployeeId as Employee_ID
FROM dbo.Customer c
INNER JOIN dbo.Account AS acc ON acc.CurrencyId=c.Id
INNER JOIN dbo.AccountDetails AS acd ON acd.AccountId=acc.Id
INNER JOIN dbo.Currency AS cu ON cu.id=acc.CurrencyId
INNER JOIN dbo.Location as lo ON lo.Id=acd.LocationId
INNER JOIN dbo.Employee AS emp ON emp.ID=acc.EmployeeId
WHERE acc.CustomerId=@CustomerId and acd.TransactionDate between @validFrom and @ValidTo and acc.EmployeeId=@EmployeeId
RETURN
END
GO

SELECT * from dbo.fn_Home_1  (5,'2019.01.01','2019.12.01',5)
GO

查询给我很好的结果,最后一步是放入可以填充上面表格的函数

CREATE OR  ALTER FUNCTION dbo.fn_Homework_1 (@CustomerId int,EmployeeId int)
AS
BEGIN
SELECT  CONCAT(c.FirstName,acc.EmployeeId as Employee_ID
            FROM dbo.Customer c
            INNER JOIN dbo.Account AS acc ON acc.CurrencyId=c.Id
            INNER JOIN dbo.AccountDetails AS acd ON acd.AccountId=acc.Id
            INNER JOIN dbo.Currency AS cu ON cu.id=acc.CurrencyId
            INNER JOIN dbo.Location as lo ON lo.Id=acd.LocationId
            INNER JOIN dbo.Employee AS emp ON emp.ID=acc.EmployeeId
            WHERE acc.CustomerId=@CustomerId and acd.TransactionDate between @validFrom and @ValidTo and acc.EmployeeId=@EmployeeId
--DECLARE @validFrom date
SELECT @CustomerId,@validFrom,@ValidTo,@EmployeeId
INSERT INTO dbo.CustomerReportLogs1(CustomerId,validFrom,ValidTo,EmployeeId)
VALUES (@CustomerId,@EmployeeId)
Return
END
GO

Error message is below:
Msg 444,Level 16,State 2,Procedure fn_HomeworkFour_1,Line 5 [Batch Start Line 3798]
Select statements included within a function cannot return data to a client.
Msg 444,State 3,Line 14 [Batch Start Line 3798]
Select statements included within a function cannot return data to a client.
Msg 443,State 15,Line 15 [Batch Start Line 3798]
Invalid use of a side-effecting operator 'INSERT' within a function.

那么有人可以帮助我解决错误吗?输出列应为:CustomerId,validFrom,ValidTo和EmployeeID?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。