У временных таблиц и табличных переменных есть свои плюсы и минусы. Нам нужно решить, какой из них использовать и когда.

Давайте составим список отличий.

⇒ Табличная переменная (@table) создается в памяти. В то время как временная таблица (#temp) создается в базе данных tempdb. Однако при нехватке памяти страницы, принадлежащие табличной переменной, могут быть помещены в базу данных tempdb.

⇒ Табличные переменные не могут быть задействованы в транзакциях, журналировании или блокировке. Это делает @table быстрее, чем #temp. Таким образом, табличная переменная работает быстрее, чем временная таблица.

⇒ Временным таблицам разрешено CREATE INDEXes, тогда как табличным переменным не разрешено CREATE INDEX, вместо этого они могут иметь индекс с использованием первичного ключа или уникального ограничения.

⇒ Переменная таблицы может быть передана в качестве параметра функциям и хранимым процедурам, в то время как то же самое нельзя сделать с временными таблицами.

⇒ Временные таблицы видны в созданной подпрограмме, а также в дочерних подпрограммах. Принимая во внимание, что переменные таблицы видны только в созданной подпрограмме.

⇒ Временная таблица позволяет изменять схему в отличие от переменных таблицы.

Переменная таблицы в SQL Server - пример

Табличная переменная - очень полезная программная конструкция, как и любая другая переменная.

DECLARE @TStudent TABLE  
 (  
    RollNo INT IDENTITY(1,1)  
    , StudentID INT  
    , Name INT  
 )   
 --Insert data to Table variable @TStudent   
 INSERT INTO @TStudent(StudentID,Name)  
 SELECT DISTINCT StudentID, Name 
 FROM Student 
 ORDER BY StudentID ASC   
   
 --Select data from Table variable @TStudent  
 SELECT * FROM @TStudent  
   
 --Next batch  
 GO  
 SELECT * FROM @TStudent --gives error

Временные таблицы в SQL Server - пример

В SQL Server, в зависимости от области действия и поведения, временные таблицы бывают двух типов:

  1. Локальные временные таблицы (#temp)
  2. Глобальные временные таблицы (## temp)
CREATE TABLE #StudentTemp  
(  
    StudentID int  
    , Name varchar(50)   
    , Address varchar(150)  
)  
GO  
INSERT INTO #StudentTemp
VALUES ( 1, 'Dipendra','Pune');  
GO  
SELECT Name, Address FROM #StudentTemp

💡 Что следует помнить

  • Временные таблицы физически создаются в базе данных tempdb. Эти таблицы действуют как обычные таблицы, а также могут иметь ограничения, индексируемые как обычные таблицы.
  • Переменная таблицы действует как переменная и существует для определенного пакета выполнения запроса. Он сбрасывается, когда выходит из партии. Он создается в базе данных памяти, но может быть перенесен в базу данных tempdb.
  • Используйте переменную таблицы, если у вас меньше 1000 строк, в противном случае выберите временные таблицы.

Надеюсь, мне удалось объяснить разницу между временными таблицами и переменными таблиц в SQL Server.

Удачного запроса!

Первоначально опубликовано на https://www.c-sharpcorner.com.