【问题标题】:SQL 2008 Set variable select statement errorsSQL 2008 设置变量选择语句错误
【发布时间】:2016-07-04 11:49:26
【问题描述】:

存储过程中的变量有问题。

我不断收到错误:

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".

第二个变量(@CurrentVersion)是问题之一。我最初创建了没有那个程序的程序,这很好。现在我需要更新它,但它不会接受我尝试使用 select 语句设置其值的第二个变量。

我一直在使用这里的帖子和各种其他网站尝试“设置”,“选择”一路玩弄格式,但一无所获。

这是完整的过程,任何帮助都非常感谢。

  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

【问题讨论】:

    标签: sql sql-server-2008 stored-procedures


    【解决方案1】:

    乍一看,

    AS 语句之后写Select 语句,

    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
    

    【讨论】:

    • 感谢幸运!认为这将是一件非常简单的事情!
    • @DA082 很高兴为您提供帮助。不要忘记将其标记为 ans 并给予 UP 投票。这样这个问题就不会有多个答案了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多