SQL Server Создание временной таблицы для этого запроса
У меня есть этот запрос:
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)
Я просто хочу сохранить его в таблице temp, чтобы я мог что-то с этим сделать. Было бы здорово, если бы кто-нибудь мог просто включить синтаксис для создания временной таблицы в SQL Server.
Я пробовал разные способы, но я был потерян и не получил желаемого результата.
Ответы
Ответ 1
Если вы хотите просто создать временную таблицу внутри запроса, которая позволит вам что-то сделать с результатами, которые вы вносите в нее, вы можете сделать что-то вроде следующего:
DECLARE @T1 TABLE (
Item 1 VARCHAR(200)
, Item 2 VARCHAR(200)
, ...
, Item n VARCHAR(500)
)
В верхней части вашего запроса, а затем выполните
INSERT INTO @T1
SELECT
FROM
(...)
Ответ 2
Нравится это. Удостоверьтесь, что вы сбросили временную таблицу (в конце блока кода, после того, как вы закончите с ней), или это будет ошибка при последующих запусках.
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
Ответ 3
Если вы хотите запросить результаты из временной таблицы внутри одного и того же запроса, вы можете использовать # temp tables или @table variables (лично я предпочитаю @), для запроса вне области, которую вы хотели бы использовать # # глобальных временных таблиц или создать новую таблицу с результатами.
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
Ответ 4
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
Здесь #
- используйте это для создания таблицы внутри tempdb
@
- используйте это, чтобы создать таблицу как переменную.
Ответ 5
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.......
Ответ 6
Если вы хотите создать временную таблицу после проверки существующей таблицы. Вы можете использовать следующий код
DROP TABLE IF EXISTS tempdb.dbo.#temptable
CREATE TABLE #temptable
(
SiteName NVARCHAR(50),
BillingMonth varchar(10),
Consumption INT,
)
После создания временной таблицы вы можете вставить данные в эту таблицу как обычную таблицу:
INSERT INTO #temptable
SELECT COLUMN1,...
FROM
(...)
или
INSERT INTO #temptable
VALUES (value1, value2, value3, ...);
Оператор SELECT используется для выбора данных из временной таблицы.
SELECT * FROM #temptable
вы можете вручную удалить временную таблицу, используя инструкцию DROP TABLE:
DROP TABLE #temptable;