将0值插入到我的表中而不是正确的值希望有人可以帮助我,因为我完全不知道为什么会发生这种情况。为什么SQL服务器使用函数
我目前正在对英超比赛结果进行一些分析,并且作为其中的一部分,我创建了一个多语句表UDF。
该函数接受HomeTeam,AwayTeam和MatchDate参数,然后计算在指定的匹配日期之前在主队和客队之间赢得,抽签或失去的每个比赛结果。
此功能通过手动调用它工作正常,并返回这些值的
Home Away Draw
0 8 4
我想这个信息添加到每场比赛的结果在我的匹配表,所以创建的查询从移动火柴staging table,使用OUTER APPLY和插入这些值的函数(我也在这之前另外应用了另一个函数,它工作正常),然后插入我的MatchData表。
如果我只是选择值,查询的工作原理,但如果我插入到我的MatchData表中,值都填充为0。
我已经尝试了很多测试,它确认这也会发生,如果我使用SELECT,除非表是暂时的。
要添加,在任何时候都不存在有关值的转换,它们始终保持为整数,目标列的类型也是int。
希望有人能给我一些关于下一步尝试的想法。代码如下。对任何写得不好的道歉,因为我已经混淆了代码很多,现在试图让它插入正确的值
在此先感谢!
这里的存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [Load].[MoveToMatchData]
AS
BEGIN
INSERT INTO Football.MatchData.PremierLeague
SELECT *
FROM
(SELECT
[League], [MatchID], [Season],
[MatchDate], [HomeTeam], [AwayTeam],
[FTHomeGoals], [FTAwayGoals], [FTResult],
[HTHomeGoals], [HTAwayGoals], [HTResult],
[Referee], [HomeShots], [AwayShots],
[HomeShotsOnTarget], [AwayShotsOnTarget],
[HomeFouls], [AwayFouls], [HomeCorners], [AwayCorners],
[HomeYellows], [AwayYellows], [HomeReds], [AwayReds]
FROM
[Football].[Load].[Staging_MatchData] AS a
WHERE
League = 'E0') AS a
OUTER APPLY
(
SELECT * FROM Football.Load.CreateRelativeTable_Prem
(a.MatchDate, a.HomeTeam, a.AwayTeam, a.Season, A.League)
) as b
OUTER APPLY
这里的UDF
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [Load].[GetH2HRecords]
(@HomeTeam varchar(50), @AwayTeam varchar(50), @MatchDate date)
RETURNS @H2H TABLE
(
Home int,
Away int,
Draw int
)
AS
BEGIN
DECLARE @FromDate date
SET @FromDate = DATEADD(yyyy,-10,@MatchDate)
INSERT INTO @H2H
SELECT
a.[Number of Matches] as HomeHTH, b.[Number of Matches] as AwayHTH, c.[Number of Matches] as DrawHTH
FROM
(
SELECT
COUNT(MatchID) as [Number of Matchesh]
FROM MatchData.PremierLeague
WHERE HomeTeam = @HomeTeam
AND AwayTeam = @AwayTeam
AND MatchDate > @FromDate
AND FTResult = 'H'
) as a
OUTER APPLY
(
SELECT
COUNT(MatchID) as [Number of Matchesa]
FROM MatchData.PremierLeague
WHERE HomeTeam = @HomeTeam
AND AwayTeam = @AwayTeam
AND MatchDate > @FromDate
AND FTResult = 'A'
) as b
OUTER APPLY
(
SELECT
COUNT(MatchID) as [Number of Matchesd]
FROM MatchData.PremierLeague
WHERE HomeTeam = @HomeTeam
AND AwayTeam = @AwayTeam
AND MatchDate > @FromDate
AND FTResult = 'D'
) as c
RETURN
END
(
SELECT * FROM Football.Load.GetH2HRecords
(a.HomeTeam, a.AwayTeam, a.MatchDate)
) as c
END
是否有任何理由你有表中的数据库名称?你是否插入不同的(链接?)服务器? –
查询中没有涉及链接的服务器,我发现它对我的表名完全有效,因为它阻止事物进入默认数据库,因为我经常处理不同的项目,这些项目位于不同的数据库中等。项目我计划创建多个数据库,其中包含我想分析的数据的不同部分,只是为了保持整洁。 – wrslphil
您应该始终在INSERT INTO上使用显式列列表,并在SELECT查询上使用显式列列表。如果这不能解决问题,请尝试创建一个小问题的补充。 –