2016-07-04 8 views
0

Haben Sie ein Problem mit Variablen in einer gespeicherten Prozedur.SQL 2008 Setze Variable Select Anweisung Fehler

Ich erhalte immer Fehler:

Msg 156, Level 15, State 1, Procedure SP_ProjectData, Line 6 
Incorrect syntax near the keyword 'SELECT'. 
Msg 137, Level 15, State 1, Procedure SP_ProjectData, Line 6 
Must declare the scalar variable "@CurrentVersion". 

Die zweite Variable (@CurrentVersion) ist das Problem ein. Ich habe zunächst das Verfahren ohne dieses erstellt und es war in Ordnung. Jetzt muss ich es aktualisieren, aber es wird einfach nicht die zweite Variable akzeptieren, die ich versuche, ihren Wert mit einer Select-Anweisung zu setzen.

Ich habe Runde und Runde mit Posts hier und alle möglichen anderen Seiten versuchen "Set", "Select" herumspielen mit der Formatierung auf dem Weg, aber haben sich nichts einfallen lassen.

Dies ist die komplette Prozedur, jede Hilfe sehr geschätzt wie immer.

USE [ic_intranet] 
    GO 
    /****** Object: StoredProcedure [dbo].[SP_ProjectData] Script Date: 07/04/2016 12:29:06 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 

    ALTER PROCEDURE [dbo].[SP_ProjectData] 
     @ProjectRef int, 
     @CurrentVersion decimal(4, 2) 

     SELECT @CurrentVersion = VersionNumber FROM t_ProjectEquipmentVersions WHERE CurrentVersion = 'true' and JobNumber = @ProjectRef 

    AS 

    SELECT 
    t_Projects.JobNumber, 
    t_Projects.JobName, 
    t_Projects.ProjectType, 
    t_Projects.ProjectStatus, 
    t_Projects.JobCode, 
    t_Projects.TargetCompleteDate, 
    t_Projects.ActualFinishDate, 
    t_Projects.LocationCountry, 
    t_Projects.LocationTown, 
    t_Projects.SoldDate, 
    (SELECT SUM(ProjectGBPCost) FROM dbo.t_ProjectEquipment WHERE (JobNumber = @ProjectRef)) AS TotalValueBuy, 
    (SELECT SUM(ProjectGBPRetail) FROM dbo.t_ProjectEquipment WHERE (JobNumber = @ProjectRef)) AS TotalValueSell, 
    (SELECT COUNT(Ordered) FROM dbo.t_ProjectEquipment WHERE (Ordered = '1' and JobNumber = @ProjectRef) GROUP BY Ordered) AS OrderedItems, 
    (SELECT SUM(ProjectGBPCost) FROM dbo.t_ProjectEquipment WHERE (Ordered = '1' and JobNumber = @ProjectRef)) AS OrderedValueBuy, 
    (SELECT SUM(ProjectGBPRetail) FROM dbo.t_ProjectEquipment WHERE (Ordered = '1' and JobNumber = @ProjectRef)) AS OrderedValueSell, 
    (SELECT COUNT(Ordered) FROM dbo.t_ProjectEquipment WHERE (Ordered = '0' and JobNumber = @ProjectRef) GROUP BY Ordered) AS NotOrderedItems, 
    (SELECT SUM(ProjectGBPCost) FROM dbo.t_ProjectEquipment WHERE (Ordered = '0' and JobNumber = @ProjectRef)) AS NotOrderedValueBuy, 
    (SELECT SUM(ProjectGBPRetail) FROM dbo.t_ProjectEquipment WHERE (Ordered = '0' and JobNumber = @ProjectRef)) AS NotOrderedValueSell, 
    t_EmployeeProjectManager.Firstname AS ProjectManagerFirstname, 
    t_EmployeeProjectManager.Surname AS ProjectManagerSurname, 
    t_EmployeeLeadEngineer.Firstname AS LeadEngineerFirstname, 
    t_EmployeeLeadEngineer.Surname AS LeadEngineerSurname, 
    t_EmployeeSalesRep.Firstname AS SalesRepFirstname, 
    t_EmployeeSalesRep.Surname AS SalesRepSurname, 
    t_EmployeeDesigner.Firstname AS DesignerFirstname, 
    t_EmployeeDesigner.Surname AS DesignerSurname 
    FROM t_Projects 
    LEFT JOIN t_Employee AS t_EmployeeProjectManager ON t_Projects.ProjectManager = t_EmployeeProjectManager.ID 
    LEFT JOIN t_Employee AS t_EmployeeLeadEngineer ON t_Projects.LeadEngineer = t_EmployeeLeadEngineer.ID 
    LEFT JOIN t_Employee AS t_EmployeeSalesRep ON t_Projects.SalesRep = t_EmployeeSalesRep.ID 
    LEFT JOIN t_Employee AS t_EmployeeDesigner ON t_Projects.Designer = t_EmployeeDesigner.ID 
    WHERE JobNumber = @ProjectRef 

Antwort

0

Auf den ersten Blick

Schreiben Sie die Select Statement nach der AS Aussage,

USE [ic_intranet] 
    GO 
    /****** Object: StoredProcedure [dbo].[SP_ProjectData] Script Date: 07/04/2016 12:29:06 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 

    ALTER PROCEDURE [dbo].[SP_ProjectData] 
     @ProjectRef int, 
     @CurrentVersion decimal(4, 2) 


    AS 


     SELECT @CurrentVersion = VersionNumber FROM t_ProjectEquipmentVersions WHERE CurrentVersion = 'true' and JobNumber = @ProjectRef 

    SELECT 
    t_Projects.JobNumber, 
    t_Projects.JobName, 
    t_Projects.ProjectType, 
    t_Projects.ProjectStatus, 
    t_Projects.JobCode, 
    t_Projects.TargetCompleteDate, 
    t_Projects.ActualFinishDate, 
    t_Projects.LocationCountry, 
    t_Projects.LocationTown, 
    t_Projects.SoldDate, 
    (SELECT SUM(ProjectGBPCost) FROM dbo.t_ProjectEquipment WHERE (JobNumber = @ProjectRef)) AS TotalValueBuy, 
    (SELECT SUM(ProjectGBPRetail) FROM dbo.t_ProjectEquipment WHERE (JobNumber = @ProjectRef)) AS TotalValueSell, 
    (SELECT COUNT(Ordered) FROM dbo.t_ProjectEquipment WHERE (Ordered = '1' and JobNumber = @ProjectRef) GROUP BY Ordered) AS OrderedItems, 
    (SELECT SUM(ProjectGBPCost) FROM dbo.t_ProjectEquipment WHERE (Ordered = '1' and JobNumber = @ProjectRef)) AS OrderedValueBuy, 
    (SELECT SUM(ProjectGBPRetail) FROM dbo.t_ProjectEquipment WHERE (Ordered = '1' and JobNumber = @ProjectRef)) AS OrderedValueSell, 
    (SELECT COUNT(Ordered) FROM dbo.t_ProjectEquipment WHERE (Ordered = '0' and JobNumber = @ProjectRef) GROUP BY Ordered) AS NotOrderedItems, 
    (SELECT SUM(ProjectGBPCost) FROM dbo.t_ProjectEquipment WHERE (Ordered = '0' and JobNumber = @ProjectRef)) AS NotOrderedValueBuy, 
    (SELECT SUM(ProjectGBPRetail) FROM dbo.t_ProjectEquipment WHERE (Ordered = '0' and JobNumber = @ProjectRef)) AS NotOrderedValueSell, 
    t_EmployeeProjectManager.Firstname AS ProjectManagerFirstname, 
    t_EmployeeProjectManager.Surname AS ProjectManagerSurname, 
    t_EmployeeLeadEngineer.Firstname AS LeadEngineerFirstname, 
    t_EmployeeLeadEngineer.Surname AS LeadEngineerSurname, 
    t_EmployeeSalesRep.Firstname AS SalesRepFirstname, 
    t_EmployeeSalesRep.Surname AS SalesRepSurname, 
    t_EmployeeDesigner.Firstname AS DesignerFirstname, 
    t_EmployeeDesigner.Surname AS DesignerSurname 
    FROM t_Projects 
    LEFT JOIN t_Employee AS t_EmployeeProjectManager ON t_Projects.ProjectManager = t_EmployeeProjectManager.ID 
    LEFT JOIN t_Employee AS t_EmployeeLeadEngineer ON t_Projects.LeadEngineer = t_EmployeeLeadEngineer.ID 
    LEFT JOIN t_Employee AS t_EmployeeSalesRep ON t_Projects.SalesRep = t_EmployeeSalesRep.ID 
    LEFT JOIN t_Employee AS t_EmployeeDesigner ON t_Projects.Designer = t_EmployeeDesigner.ID 
    WHERE JobNumber = @ProjectRef 
+0

Dank glücklich! Dachte, es wäre etwas wirklich einfaches! – DA082

+0

@ DA082 Gut zu helfen. Vergessen Sie nicht, es als ans und als UP-Vote zu markieren. Damit es für diese Frage keine Mehrfachantworten gibt. – Lucky