Fondamentalmente è ciò che dice il titolo. Questo è il mio codice'CREATE VIEW' deve essere la prima istruzione in un batch di query
USE Assignment2;
GO
/* Player View (2 marks)
Create a view which shows the following details of all players:
• The ID number of the player
• The first name and surname of the player concatenated and given an alias of “full_name”
• The team ID number of the player (if applicable)
• The team name of the player (if applicable)
• The coach ID number of the player (if applicable)
• The name of the player’s coach (if applicable)
Creating this view requires a select statement using multiple joins and concatenation of names.
Make sure that you use the appropriate type of join to ensure that players without teams or coaches are still included in the results.
*/
-- Write your Player View here
PRINT 'Creating Player View'
CREATE VIEW playerView AS
SELECT player.id, player.firstName + ' ' + player.surname AS 'Full name', player.team, team.name, player.coach, coach.firstName, coach.surname
FROM player
LEFT OUTER JOIN team
ON player.team = team.id
LEFT OUTER JOIN player as coach
ON player.coach = coach.id;
GO
/* Race View (3 marks)
Create a view which shows the following details of all races:
• All of the columns in the race table
• The name of the race type, course and team involved in the race
• The full name of the player observing the race and the full name of the MVP (if applicable)
• A calculated column with an alias of “unpenalised_score”, which adds the points penalised to the final score
Creating this view requires a select statement using multiple joins and concatenation of names.
Make sure that you use the appropriate type of join to ensure that races without MVPs are still included in the results.
*/
-- Write your Race View here
PRINT 'Creating Race View'
CREATE VIEW raceView AS
SELECT race.id, race.dateOfRace, race.raceType, raceType.name AS raceTypeName, race.course, course.name AS courseName, race.team, team.name AS teamName, race.observer, obs.firstName + ' ' + obs.surname AS observer_name, race.mvp, mvp.firstName + ' ' + mvp.surname AS mvp_name, race.pointsPenalised, race.finalScore + race.pointsPenalised AS unpenalised_score, race.finalScore
FROM race
INNER JOIN raceType
ON race.raceType = raceType.id
INNER JOIN course
ON race.course = course.id
INNER JOIN team
ON race.team = team.id
LEFT OUTER JOIN player AS mvp
ON race.mvp = mvp.id
LEFT OUTER JOIN player AS obs
ON race.observer = obs.id;
GO
SELECT *
FROM playerView
SELECT *
FROM raceView
/* Additional Information:
The views are very convenient replacements for the tables they represent, as they include the names and calculated values that you will often need in queries.
You are very much encouraged to use the views to simplify the queries that follow. You can use a view in a SELECT statement in exactly the same way as you can use a table.
If you wish to create additional views to simplify the queries which follow, include them in this file.
*/
Quando eseguo ogni CREATE VIEW
separatamente, sembra funzionare correttamente senza errori. Ma quando provo a eseguire l'intero script, mi dà questo errore.
Msg 111, livello 15, stato 1, riga 20
'CREATE VIEW' deve essere la prima istruzione in un batch di query.
Messaggio 111, livello 15, stato 1, riga 15
'CREATE VIEW' deve essere la prima istruzione in un batch di query.
Messaggio 208, livello 16, stato 1, riga 2
Nome oggetto non valido 'playerView'.
Prima di tentare di eseguire questo script, prima cancella il database, ricrea le tabelle, le popolano e quindi eseguo questo script.
Qualche idea su dove sto andando male?
Mettere un 'go' poco prima della dichiarazione di 'creare vista ...'. – sventevit
@Shivarn non hai mai selezionato una risposta –
@Omar Jackman la tua risposta e la teoria di Damien_The_Unbeliever era corretta. Anche se la tua risposta è stata quella che mi ha fatto capire chiaramente e ha aiutato a correggere il mio codice. Grazie mille – Shivarn