У временных таблиц и табличных переменных есть свои плюсы и минусы. Нам нужно решить, какой из них использовать и когда.
Давайте составим список отличий.
⇒ Табличная переменная (@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, в зависимости от области действия и поведения, временные таблицы бывают двух типов:
- Локальные временные таблицы (#temp)
- Глобальные временные таблицы (## 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.