【问题标题】:T-SQL - populating data in temp table in stored procedure.T-SQL - 在存储过程的临时表中填充数据。
【发布时间】:2013-12-02 13:01:16
【问题描述】:

我需要有关我目前正在处理的存储过程的帮助。基本上存储过程可以正常工作并获取我所需的数据。我想保留这个功能并在存储过程中添加新的临时表,并用我得到的数据填充这个临时表。

我不知道在我的特定存储过程中应该在哪里/以及如何使用 INSERT INTO SELECT 语句或 SELECT INTO。 下面我提交我的简化存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_GetHourReportData]

@dateFrom   SMALLDATETIME,
@dateTo     SMALLDATETIME,
@hourFrom   INT,
@hourTo     INT

AS
BEGIN

SET NOCOUNT ON;

CREATE TABLE tempTable
(
    -- fields
)

IF (DATEDIFF(DAY, @dateFrom, @dateTo) = 0)
    BEGIN
        SELECT -- fields
        FROM -- tables 
        WHERE -- conditions
    END
ELSE IF (DATEDIFF(DAY, @dateFrom, @dateTo) = 1)
    BEGIN
        SELECT -- fields
        FROM -- tables 
        WHERE -- conditions
    UNION ALL
        SELECT -- fields
        FROM -- tables
        WHERE -- conditions
    END
ELSE
    BEGIN
        SELECT -- fields
        FROM -- tables
        WHERE -- conditions    
    UNION ALL
        SELECT -- fields
        FROM -- tables 
        WHERE -- conditions
    UNION ALL
        SELECT -- fields
        FROM -- tables
        WHERE -- conditions
    END
END

谢谢。任何帮助将不胜感激。

【问题讨论】:

    标签: tsql sql-insert temp union-all


    【解决方案1】:
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    ALTER PROCEDURE [dbo].[sp_GetHourReportData]
    
    @dateFrom   SMALLDATETIME,
    @dateTo     SMALLDATETIME,
    @hourFrom   INT,
    @hourTo     INT
    
    AS
    BEGIN
    
    SET NOCOUNT ON;
    
    CREATE TABLE #tempTable --notice the #
    (
        -- fields
    )
    
    IF (DATEDIFF(DAY, @dateFrom, @dateTo) = 0)
        BEGIN
            insert into #tempTable
            SELECT -- fields
            FROM -- tables 
            WHERE -- conditions
        END
    ELSE IF (DATEDIFF(DAY, @dateFrom, @dateTo) = 1)
        BEGIN
            insert into #tempTable
            SELECT -- fields
            FROM -- tables 
            WHERE -- conditions
        UNION ALL
            SELECT -- fields
            FROM -- tables
            WHERE -- conditions
        END
    ELSE
        BEGIN
            insert into #tempTable
            SELECT -- fields
            FROM -- tables
            WHERE -- conditions    
        UNION ALL
            SELECT -- fields
            FROM -- tables 
            WHERE -- conditions
        UNION ALL
            SELECT -- fields
            FROM -- tables
            WHERE -- conditions
        END
    END
    

    【讨论】:

    • 谢谢 :) 这正是我所需要的
    【解决方案2】:
    CREATE TABLE tempTable
    (
        -- fields
    )
    
    IF (DATEDIFF(DAY, @dateFrom, @dateTo) = 0)
        BEGIN
            INSERT INTO tempTable
            (SELECT -- fields
            FROM -- tables 
            WHERE -- conditions)
        END
    ELSE IF (DATEDIFF(DAY, @dateFrom, @dateTo) = 1)
        BEGIN
            INSERT INTO tempTable
            (SELECT -- fields
            FROM -- tables 
            WHERE -- conditions
        UNION ALL
            SELECT -- fields
            FROM -- tables
            WHERE -- conditions)
        END
    ELSE
        BEGIN
            INSERT INTO tempTable
            (SELECT -- fields
            FROM -- tables
            WHERE -- conditions    
        UNION ALL
            SELECT -- fields
            FROM -- tables 
            WHERE -- conditions
        UNION ALL
            SELECT -- fields
            FROM -- tables
            WHERE -- conditions)
        END
    END
    select * from tempTable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      相关资源
      最近更新 更多