webentwicklung-frage-antwort-db.com.de

SQL Server Erstellen einer temporären Tabelle für diese Abfrage

Ich habe diese Abfrage:

DECLARE 
@ProjectID int = 3,
@Year int = 2010,
@MeterTypeID int = 1,
@StartDate datetime,
@EndDate datetime

SET @StartDate = '07/01/' + CAST(@Year as VARCHAR)
SET @EndDate = '06/30/' + CAST(@Year+1 as VARCHAR)

SELECT  tblMEP_Sites.Name AS SiteName, convert(varchar(10),BillingMonth ,101) AS BillingMonth, SUM(Consumption) AS Consumption
FROM tblMEP_Projects

JOIN tblMEP_Sites
ON tblMEP_Projects.ID = tblMEP_Sites.ProjectID

JOIN tblMEP_Meters
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID

JOIN tblMEP_MonthlyData
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID

JOIN tblMEP_CustomerAccounts
ON tblMEP_CustomerAccounts.ID = tblMEP_Meters.CustomerAccountID

JOIN tblMEP_UtilityCompanies
ON tblMEP_UtilityCompanies.ID = tblMEP_CustomerAccounts.UtilityCompanyID

JOIN tblMEP_MeterTypes
ON tblMEP_UtilityCompanies.UtilityTypeID = tblMEP_MeterTypes.ID

WHERE tblMEP_Projects.ID = @ProjectID
AND tblMEP_MonthlyData.BillingMonth Between @StartDate AND @EndDate
AND tbLMEP_MeterTypes.ID = @MeterTypeID
GROUP BY BillingMonth, tblMEP_Sites.Name
ORDER BY month(BillingMonth)

Ich möchte es nur in einer temporären Tabelle speichern, damit ich etwas damit anfangen kann. Es wäre großartig, wenn jemand nur die Syntax für das Erstellen einer temporären Tabelle in SQL Server verwenden kann. 

Ich habe verschiedene Wege ausprobiert, aber ich war verloren und bekam nicht das gewünschte Ergebnis.

10
Natalia Natalie

Wenn Sie nur eine temporäre Tabelle in der Abfrage erstellen möchten, die es Ihnen ermöglicht, etwas mit den Ergebnissen zu tun, die Sie in der Abfrage hinterlegen, können Sie Folgendes tun:

DECLARE @T1 TABLE (
Item 1 VARCHAR(200)
, Item 2 VARCHAR(200)
, ...
, Item n VARCHAR(500)
)

Oben auf Ihrer Anfrage und dann eine

INSERT INTO @T1
SELECT
FROM
(...)
26
MCP_infiltrator

So was. Stellen Sie sicher, dass Sie die temporäre Tabelle löschen (am Ende des Codeblocks, nachdem Sie damit fertig sind). Andernfalls wird bei nachfolgenden Läufen ein Fehler angezeigt.

SELECT  
    tblMEP_Sites.Name AS SiteName, 
    convert(varchar(10),BillingMonth ,101) AS BillingMonth, 
    SUM(Consumption) AS Consumption
INTO 
    #MyTempTable
FROM 
    tblMEP_Projects
    JOIN tblMEP_Sites
        ON tblMEP_Projects.ID = tblMEP_Sites.ProjectID
    JOIN tblMEP_Meters
        ON tblMEP_Meters.SiteID = tblMEP_Sites.ID
    JOIN tblMEP_MonthlyData
        ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID
    JOIN tblMEP_CustomerAccounts
        ON tblMEP_CustomerAccounts.ID = tblMEP_Meters.CustomerAccountID
    JOIN tblMEP_UtilityCompanies
        ON tblMEP_UtilityCompanies.ID = tblMEP_CustomerAccounts.UtilityCompanyID
    JOIN tblMEP_MeterTypes
        ON tblMEP_UtilityCompanies.UtilityTypeID = tblMEP_MeterTypes.ID
WHERE 
    tblMEP_Projects.ID = @ProjectID
    AND tblMEP_MonthlyData.BillingMonth Between @StartDate AND @EndDate
    AND tbLMEP_MeterTypes.ID = @MeterTypeID
GROUP BY 
    BillingMonth, tblMEP_Sites.Name

DROP TABLE #MyTempTable
9
Cortright

Wenn Sie die Ergebnisse aus einer temporären Tabelle in derselben Abfrage abfragen möchten, können Sie # temp -Tabellen oder @ Tabellenvariablen verwenden (ich persönlich bevorzuge @). Für die Abfrage außerhalb des Gültigkeitsbereichs möchten Sie entweder ## global temp verwenden Tabellen oder erstellen Sie eine neue Tabelle mit den Ergebnissen.

DECLARE 
@ProjectID int = 3,
@Year int = 2010,
@MeterTypeID int = 1,
@StartDate datetime,
@EndDate datetime

SET @StartDate = '07/01/' + CAST(@Year as VARCHAR)
SET @EndDate = '06/30/' + CAST(@Year+1 as VARCHAR)

DECLARE @MyTempTable TABLE (SiteName varchar(50), BillingMonth varchar(10), Consumption float)

INSERT INTO @MyTempTable (SiteName, BillingMonth, Consumption)
SELECT  tblMEP_Sites.Name AS SiteName, convert(varchar(10),BillingMonth ,101) AS BillingMonth, SUM(Consumption) AS Consumption
FROM tblMEP_Projects
5
DECLARE #MyTempTable TABLE (SiteName varchar(50), BillingMonth varchar(10), Consumption float)

INSERT INTO #MyTempTable (SiteName, BillingMonth, Consumption)
SELECT  tblMEP_Sites.Name AS SiteName, convert(varchar(10),BillingMonth ,101) AS BillingMonth, SUM(Consumption) AS Consumption
FROM tblMEP_Projects.......  --your joining statements

Hier # - verwenden Sie diese Option, um eine Tabelle in tempdb zu erstellen.
@ - verwenden Sie diese Option, um eine Tabelle als Variable zu erstellen.

4
Paritosh

Wenn Sie eine temporäre Tabelle erstellen möchten, nachdem die vorhandene Tabelle überprüft wurde, können Sie den folgenden Code verwenden

DROP TABLE IF EXISTS tempdb.dbo.#temptable
CREATE TABLE #temptable
  (
   SiteName             NVARCHAR(50),
   BillingMonth         varchar(10),
   Consumption          INT,
  )

Nach dem Erstellen der temporären Tabelle können Sie Daten als reguläre Tabelle in diese Tabelle einfügen:

INSERT INTO #temptable
SELECT COLUMN1,...
FROM
(...)

oder

INSERT INTO #temptable
VALUES (value1, value2, value3, ...);

Mit der SELECT-Anweisung werden Daten aus einer temporären Tabelle ausgewählt.

SELECT * FROM #temptable

sie können die temporäre Tabelle mit der Anweisung DROP TABLE manuell entfernen:

DROP TABLE #temptable;
0
Reza Jenabi
IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL DROP TABLE #MyTempTable

CREATE TABLE #MyTempTable (SiteName varchar(50), BillingMonth varchar(10), Consumption float)

INSERT INTO #MyTempTable (SiteName, BillingMonth, Consumption)
SELECT  tblMEP_Sites.Name AS SiteName, convert(varchar(10),BillingMonth ,101)
AS BillingMonth, SUM(Consumption) AS Consumption
FROM tblMEP_Projects.......
0