誰かが私がアイデアから完全に脱出してくれることを願っています。なぜSQLサーバーが正しい値の代わりにテーブルに0の値を挿入するのですか?
私は現在、プレミアリーグの試合結果に関する分析を行っており、その一環として、マルチステートメントテーブルUDFを作成しました。
この関数はHomeTeam、AwayTeamとMatchDateパラメータを受け入れ、その後、前に指定されたアップマッチの日に、勝っ描かれたり、家庭でアウェイチームの間で歴史的に失われた各試合の結果のカウントを行います。
この機能は、手動でそれを呼び出すことにより、正常に動作し、私は私のマッチテーブル内のすべての試合結果にこの情報を追加したい
Home Away Draw
0 8 4
ような値を返し、そうで試合を移動するためのクエリを作成これらの値を挿入する関数でOUTER APPLYを使用します(これより前に別の関数を適用しても問題ありません)。次にMatchDataテーブルに挿入します。
値を選択するだけでクエリが機能しますが、MatchDataテーブルにINSERT INTOを設定すると、値はすべて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クエリでは明示的な列リストを使用する必要があります。それで解決できない場合は、問題の小さな説明を作成してみてください。 –