Чем временная таблица отличается от таблицы, инициированной с помощью ключевого слова WITH в MS SQL? - PullRequest
2 голосов
/ 03 июля 2019

У меня проблемы с пониманием таблицы SOURCETABLE из этого кода:

CREATE PROCEDURE [ifc_tt].[SendTimeBalance]
AS
     DECLARE @endOfPreviousMonth DATE;
     DECLARE @now DATETIME= GETDATE();
     SELECT @endOfPreviousMonth = EOMONTH(GETDATE(), -1);
     WITH sourceTable
          AS (SELECT w.EmployeeId AS corporateId, 
                     w.Date AS date, 
                     w.logaValue AS flextimeHours
              FROM rpt_tt.DQC_TimeBalance AS w
              WHERE w.Date <= @endOfPreviousMonth)
          MERGE INTO ifc_tt.TimeBalance AS t
          USING sourceTable AS s
          ON t.corporateId = s.corporateId
             AND t.date = s.date
              WHEN NOT MATCHED BY TARGET
              THEN
                INSERT(corporateId, 
                       date, 
                       flextimeHours, 
                       overtimeHours, 
                       lastUpdate, 
                       Comment)
                VALUES
          (s.corporateId, 
           s.date, 
           s.flextimeHours, 
           NULL, 
           @now, 
           NULL
          )
              WHEN MATCHED
              THEN UPDATE SET 
                              t.flextimeHours = s.flextimeHours, 
                              t.lastUpdate = @now;
     RETURN 0;

Обычно, когда я вижу временные таблицы, они начинаются с @ (см. @EndOfPreviousMonth).

Но в этом случае sourcetable используется без @. Еще читаю это похоже на временную таблицу. В чем здесь разница, и как здесь в этом контексте?

Спасибо за вашу помощь :)

1 Ответ

3 голосов
/ 03 июля 2019

Таблицы, начинающиеся с @, на которые вы ссылаетесь (ex. @table1), являются табличными переменными . Временные таблицы - это таблицы, которые вы определяете, используя # (локальные для вашей сессии) или ## (глобальные временные таблицы).Ex. #tempTable1, ##tempTable2.

Здесь у вас есть Общее табличное выражение .Это в основном именованный набор результатов, он не сохраняется как реальная физическая таблица.

Он существует до тех пор, пока вы выполняете запрос, содержащий данные, которые вы «заполнили» им в предложении SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...