Создание табличной переменной в SQL Server 2008 R2 - PullRequest
30 голосов
/ 13 марта 2012

Что такое табличная переменная?И как создать табличную переменную (виртуальную таблицу в памяти) со столбцами, которые соответствуют существующему набору результатов хранимой процедуры.

Я выполнил процедуру, и после ее выполнения имена столбцов мне известны.Но нужно ли мне объявлять тот же тип данных столбцов, что и в хранимой процедуре?

РЕДАКТИРОВАТЬ: я пытался это

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL 
); 

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param

1 Ответ

30 голосов
/ 15 марта 2012

@tableName Переменные таблицы активны на время выполнения скрипта, т. Е. Они являются только объектами уровня сеанса.

Чтобы проверить это, откройте два окна редактора запросов в SQL Server Management Studio и создайте переменные таблицы с одинаковыми именами, но разными структурами. Вы получите представление. Таким образом, объект @tableName является временным и используется для внутренней обработки данных, и он не влияет на фактическую структуру базы данных.

Существует другой тип табличного объекта, который может быть создан для временного использования. Это #tableName объекты, объявленные как аналогичные инструкции create для физических таблиц:

Create table #test (Id int, Name varchar(50))

Этот табличный объект создается и хранится во временной базе данных. В отличие от первого, этот объект более полезен, может хранить большие данные и принимать участие в транзакциях и т. Д. Эти таблицы работают до тех пор, пока соединение не будет открыто. Вы должны удалить созданный объект, следуя сценарию, прежде чем создавать его заново.

IF OBJECT_ID('tempdb..#test') IS NOT NULL
  DROP TABLE #test 

Надеюсь, это имеет смысл!

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