【问题标题】:How do I put my entire query in a stored procedure?如何将整个查询放入存储过程中?
【发布时间】:2015-06-23 05:05:06
【问题描述】:
SELECT
    AvHours.LineNumber,
    (SProd.PoundsMade / (AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) AS Throughput,
    SUM (ProdDtime.DownTimeHRS) AS [Lost Time], 
    (SUM(cast(ProdDtime.DownTimeHRS AS decimal(10,1))) * 100) / (cast(AvHours.AvailableHRS AS decimal(10,1))) AS [%DownTime],
    SUM(SProd.PoundsMade) AS [Pounds Made],
   (SProd.PoundsMade / (AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) *  SUM (ProdDtime.DownTimeHRS) AS [Pounds Lost]
FROM 
    rpt_Line_Shift_AvailableHrs AvHours
INNER JOIN  
    rpt_Line_Shift_Prod SProd ON AvHours.LineNumber = SProd.LineNumber 
                              AND AvHours.Shiftnumber = SProd.Shiftnumber
INNER JOIN
    rpt_Line_Shift_ProdDownTime ProdDtime ON (AvHours.LineNumber = ProdDtime.LineNumber AND 
                                           AvHours.Shiftnumber = ProdDtime.Shiftnumber)
GROUP BY 
     AvHours.LineNumber, SProd.PoundsMade, AvHours.AvailableHRS
ORDER BY 
     AvHours.LineNumber

【问题讨论】:

标签: sql sql-server tsql sql-server-2005


【解决方案1】:

您可以使用CREATE PROCEDURE 语句创建一个新的存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE YourProcedureNameHere
AS
BEGIN
    SET NOCOUNT ON;

    -- Insert statements for procedure here

END
GO

在您的具体情况下,该语句应如下所示:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE YourProcedureNameHere
AS
BEGIN
    SET NOCOUNT ON;

    SELECT
        AvHours.LineNumber,
        (SProd.PoundsMade / (AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) AS Throughput,
        SUM (ProdDtime.DownTimeHRS) AS [Lost Time], 
        (SUM(cast(ProdDtime.DownTimeHRS AS decimal(10,1))) * 100) / (cast(AvHours.AvailableHRS AS decimal(10,1))) AS [%DownTime],
        SUM(SProd.PoundsMade) AS [Pounds Made],
       (SProd.PoundsMade / (AvHours.AvailableHRS - SUM (ProdDtime.DownTimeHRS))) *  SUM (ProdDtime.DownTimeHRS) AS [Pounds Lost]
    FROM 
        rpt_Line_Shift_AvailableHrs AvHours
    INNER JOIN  
        rpt_Line_Shift_Prod SProd ON AvHours.LineNumber = SProd.LineNumber 
                                  AND AvHours.Shiftnumber = SProd.Shiftnumber
    INNER JOIN
        rpt_Line_Shift_ProdDownTime ProdDtime ON (AvHours.LineNumber = ProdDtime.LineNumber AND 
                                               AvHours.Shiftnumber = ProdDtime.Shiftnumber)
    GROUP BY 
         AvHours.LineNumber, SProd.PoundsMade, AvHours.AvailableHRS
    ORDER BY 
         AvHours.LineNumber

END
GO

请注意,Microsoft SQL Management Studio 可以自动为您的存储过程创建存根(几乎是此答案中的第一个代码 sn-p)右键单击 [Your DB]/Programmability 下的“存储过程”项并选择“新存储过程...”来自上下文菜单:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多