2016-06-15 8 views
0

これは初めてt-sqlでビューを作成しようとしていますが、CREATE VIEWがバッチ。ステートメントがバッチ内で1つだけでなければならないので、ビューエラーを作成する

なぜこのエラーが発生し、どのように修正できますか?

私はいくつかの例を検討しましたが、私は何をする必要があるかについてまだよく分かりません。

CREATE PROCEDURE [dbo].[League_Table_Insert] 
    @LeagueName VARCHAR(30) 
AS 
SET NOCOUNT ON 
BEGIN 

    CREATE VIEW League_Table AS 
    SELECT 
     TeamName AS Team, 
     COUNT(*) Played, 
     COUNT(CASE WHEN HomeScore > AwayScore THEN 1 END) Wins, 
     COUNT(CASE WHEN AwayScore > HomeScore THEN 1 END) Losses, 
     COUNT(CASE WHEN HomeScore = AwayScore THEN 1 END) Draws, 
     SUM(HomeScore) Goals_Scored, 
     SUM(AwayScore) Goals_Against, 
     SUM(HomeScore) - SUM(AwayScore) Goal_Difference, 
     SUM(
       CASE WHEN HomeScore > AwayScore THEN 3 ELSE 0 END 
      + CASE WHEN HomeScore = AwayScore THEN 1 ELSE 0 END 
     ) Points 

    FROM 
    (
     SELECT TeamName, HomeScore, AwayScore FROM dbo.Team t INNER JOIN dbo.Fixture f ON t.TeamID = f.HomeTeamID INNER JOIN dbo.League l ON f.LeagueID = l.LeagueID WHERE LeagueName = @LeagueName 
     UNION ALL 
     SELECT TeamName, HomeScore, AwayScore FROM dbo.Team t INNER JOIN dbo.Fixture f ON t.TeamID = f.HomeTeamID INNER JOIN dbo.League l ON f.LeagueID = l.LeagueID WHERE LeagueName = @LeagueName 
    ) matches 

    GROUP BY TeamName 
    ORDER BY Points DESC, Goal_Difference DESC; 
+0

タイヤクエリ。また、ビューで変数を使用することはできません。 –

+0

@Variableを使用してビューを作成することはできません。 –

+0

@FelixPamittanはクエリ全体ですが、上に作成ビューを配置しましたが、間違っていると仮定していますか? –

答えて

3

VIEWを関数内に作成することはできません。また、VIEW内の変数は使用できません。あなたが望むものはテーブル値関数です。それは、インライン関数では許可されていないので、私はORDER BY句を削除

CREATE FUNCTION dbo.League_Table (
    @LeagueName  VARCHAR(MAX) 
) 
RETURNS TABLE 
AS 
RETURN 

SELECT 
    TeamName AS Team, 
    COUNT(*) Played, 
    COUNT(CASE WHEN HomeScore > AwayScore THEN 1 END) Wins, 
    COUNT(CASE WHEN AwayScore > HomeScore THEN 1 END) Losses, 
    COUNT(CASE WHEN HomeScore = AwayScore THEN 1 END) Draws, 
    SUM(HomeScore) Goals_Scored, 
    SUM(AwayScore) Goals_Against, 
    SUM(HomeScore) - SUM(AwayScore) Goal_Difference, 
    SUM(
      CASE WHEN HomeScore > AwayScore THEN 3 ELSE 0 END 
     + CASE WHEN HomeScore = AwayScore THEN 1 ELSE 0 END 
    ) Points 

FROM 
(
    SELECT TeamName, HomeScore, AwayScore FROM dbo.Team t INNER JOIN dbo.Fixture f ON t.TeamID = f.HomeTeamID INNER JOIN dbo.League l ON f.LeagueID = l.LeagueID WHERE LeagueName = @LeagueName 
    UNION ALL 
    SELECT TeamName, HomeScore, AwayScore FROM dbo.Team t INNER JOIN dbo.Fixture f ON t.TeamID = f.HomeTeamID INNER JOIN dbo.League l ON f.LeagueID = l.LeagueID WHERE LeagueName = @LeagueName 
) matches 

GROUP BY TeamName; 

注:ここではインライン表値関数(iTVF)のためのスクリプトを作成です。そうしないと、というエラー得られます。

をORDER BY句は、ビュー、インライン関数に無効である テーブル、サブクエリ、および共通テーブル式を導出、TOPない限り、 をOFFSETまたはXML FORも指定されています。その後

、それを使用する:

SELECT * 
FROM dbo.League_Table('Sample League Name') s 
ORDER BY Points DESC, Goal_Difference DESC; 
0

MSDNドキュメントは明確に以下の状態:

次のCREATE文は、ストアド・プロシージャ

の身体のどこでも使用することができません総計
CREATE SCHEMA
のSET SHOWPLAN_TEXT
のSET SHOWPLAN_XML

をCREATEまたはALTER TRIGGER DEFAULT
のCREATE FUNCTION、CREATE TABLEまたはALTER
VIEW、CREATE TABLEまたはALTER
のUSE database_nameの

をCREATEまたはALTER PROCEDURE SET PARSEONLY
RULE
セットを作成しますSHOWPLAN_ALL

関連する問題