2011-03-01 2 views
0

Если я хочу сохранить несколько значений в переменной, как это сделать в хранимой процедуре?Как хранить более одного значения в хранимой процедуре?

Я имею в виду у нас есть понятие массива в обычном программировании мы имеем что-то подобное в хранимой процедуре

+0

Вы имеете в виду что-то вроде [csv] (http://en.wikipedia.org/wiki/Comma-separated_values)? –

+0

Да, вы это называете таблицей – Luis

+0

Как отметил Луис, базы данных используют таблицы ... – MatBailie

ответ

2

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

2

В зависимости от вашей конкретной базы данных имеется несколько вариантов.

В SQL Server можно определить

  • временную таблицу для всего подключения (CREATE TABLE #YourTable(.....))
  • глобальная временная таблица видна в любой связи (CREATE TABLE ##YourTable(.....))
  • переменная таблица (DECLARE @YourVariable TABLE (.....))
0

Вы можете создать переменную, которая является полной таблицей. Вот пример кода:

USE AdventureWorks2008R2; 
GO 
DECLARE @MyTableVar table(
    EmpID int NOT NULL, 
    OldVacationHours int, 
    NewVacationHours int, 
    ModifiedDate datetime); 
UPDATE TOP (10) HumanResources.Employee 
SET VacationHours = VacationHours * 1.25, 
    ModifiedDate = GETDATE() 
OUTPUT inserted.BusinessEntityID, 
     deleted.VacationHours, 
     inserted.VacationHours, 
     inserted.ModifiedDate 
INTO @MyTableVar; 
--Display the result set of the table variable. 
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate 
FROM @MyTableVar; 
GO 
--Display the result set of the table. 
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate 
FROM HumanResources.Employee; 
GO 

Как вы можете видеть, вы заявляете это как обычный стол. В конце процедуры он выйдет за рамки.

Это переменные таблицы . Есть также временные таблицы которые вы можете создать, что работа во многом таким же образом, ожидать, что вы объявляете их: create table #tmp (Col1 int, Col2 int);

Там хороший SO пост о разнице между ними здесь: What's the difference between a temp table and table variable in SQL Server?

И вернемся к вашему первоначальному вопросу: вы можете создать переменную таблицы и притвориться, что это массив (ну это своего рода!). Вам просто нужно думать в терминах SQL для функций массива, поэтому вместо .Find вы должны использовать предложение WHERE.

Смежные вопросы