2017-06-20 1 views
0

J'ai créé une base de données avec des statistiques de lecteur NBA juste pour pratiquer SQL et SSRS. Je suis nouveau à travailler avec des procédures stockées, mais j'ai créé la procédure suivante qui devrait (je pense) me permettre de spécifier l'équipe et le nombre de minutes.Impossible de récupérer de nouvelles données dans une requête SQL

CREATE PROCEDURE extrapstats 
--Declare variables for the team and the amount of minutes to use in --calculations 
    @team NCHAR OUTPUT, 
    @minutes DECIMAL OUTPUT 

AS 
BEGIN 

SELECT p.Fname + ' ' + p.Lname AS Player_Name, 
     p.Position, 
     --Creates averages based on the number of minutes per game specified in @minutes 
     (SUM(plg.PTS)/SUM(plg.MP))*@minutes AS PTS, 
     (SUM(plg.TRB)/SUM(plg.MP))*@minutes AS TRB, 
     (SUM(plg.AST)/SUM(plg.MP))*@minutes AS AST, 
     (SUM(plg.BLK)/SUM(plg.MP))*@minutes AS BLK, 
     (SUM(plg.STL)/SUM(plg.MP))*@minutes AS STL,  
     (SUM(plg.TOV)/SUM(plg.MP))*@minutes AS TOV, 
     (SUM(plg.FT)/SUM(plg.MP))*@minutes AS FTs, 
     SUM(plg.FT)/SUM(plg.FTA) AS FT_Percentage, 
     (SUM(plg.FG)/SUM(plg.MP))*@minutes AS FGs, 
     SUM(FG)/SUM(FGA) as Field_Percentage, 
     (SUM(plg.[3P])/SUM(plg.MP))*@minutes AS Threes, 
     SUM([3P])/SUM([3PA]) AS Three_Point_Percentage 
FROM PlayerGameLog plg 
--Joins the Players and PlayerGameLog tables 
INNER JOIN Players p 
ON p.PlayerID = plg.PlayerID 
    AND TeamID = @team 
GROUP BY p.Fname, p.Lname, p.Position, p.TeamID 
ORDER BY PTS DESC 

END; 

J'ai ensuite essayé d'utiliser le SP en exécutant la requête suivante:

DECLARE @team NCHAR, 
     @minutes DECIMAL 

EXECUTE extrapstats @team = 'OKC', @minutes = 35 
SELECT * 

Quand je fais cela, je rencontre ce message:

Msg 263, Level 16, State 1, Line 5 
Must specify table to select from. 

J'ai essayé différentes variations de cela, mais rien n'a fonctionné. Je pensais que le SP spécifiait les tables à partir desquelles sélectionner les données.

Des idées?

+0

Vous avez une instruction 'SELECT *' qui pend à cet endroit. Vous n'avez pas spécifié de table à sélectionner. D'où le message d'erreur. –

Répondre

0

La déclaration des paramètres de procédure stockée avec la clause OUTPUT signifie que les valeurs seront renvoyées par la procédure stockée à la fonction appelante. Cependant, vous les utilisez comme paramètres d'entrée, supprimez la clause OUTPUT des deux paramètres d'entrée et essayez.

Supprimez également le SELECT * dans votre instruction d'exécution, ce n'est pas obligatoire, la procédure stockée retournera les données car elle a l'instruction select.

+0

C'était un mouvement de débutant de ma part. Merci. – kredeker54