2012-03-13 18 views
29

co to jest zmienna tabeli? I jak utworzyć zmienną tabeli (wirtualna tablica w pamięci) z kolumnami pasującymi do istniejącego zestawu wyników procedury składowanej.Tworzenie zmiennej tabeli w SQL Server 2008 R2

Wykonałem procedurę, a po jej wykonaniu znane są mi nazwy kolumn. Ale czy muszę zadeklarować ten sam typ danych kolumn, co w procedurze przechowywanej?

EDIT: Próbowałem to

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

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

Tylko słowo ostrzeżenia: zmienna tabeli nie może być zapisana w pamięci. To mit. – JohnFx

+0

Czy możesz podać kod, który dotychczas posiadasz, abyśmy mogli odpowiedzieć na twoje pytanie? – JohnFx

+0

@JohnFx Nie wykonałem kodu dla utworzenia zmiennej tabeli. Zrobiłem procedurę przechowywaną i po jej uruchomieniu otrzymałem kilka nazw kolumn, teraz chcę, aby te nazwy kolumn były przechowywane w zmiennej tabeli. A jeśli nie zawsze jest w pamięci, to jak mogę znaleźć to w mojej bazie danych, przepraszam za kłopot, jestem nowy w SQL. Proszę pomóż. – Pankaj

Odpowiedz

29

@tableName zmienne Tabela żyją na czas trwania skryptu działa tylko to, że są tylko obiekty poziomie sesji.

Aby to sprawdzić, otwórz dwa okna edytora zapytań w ramach serwera zarządzania serwerami sql i utwórz zmienne tabel o tej samej nazwie, ale o różnych strukturach. Dostaniesz pomysł. Obiekt @tableName jest zatem tymczasowy i służy do wewnętrznego przetwarzania danych i nie przyczynia się do faktycznej struktury bazy danych.

Istnieje inny typ obiektu tabeli, który można utworzyć do tymczasowego użytku. Są #tableName obiekty zadeklarowane niczym podobnym oświadczeniem stworzyć dla tabel fizycznych:

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

Ta tabela obiekt jest tworzone i przechowywane w bazie temp. W przeciwieństwie do pierwszego, ten obiekt jest bardziej przydatny, może przechowywać duże ilości danych i bierze udział w transakcjach itp. Tabele te są aktywne, dopóki połączenie nie zostanie otwarte. Musisz upuścić utworzony obiekt, wykonując poniższy skrypt przed ponownym jego utworzeniem.

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

Mam nadzieję, że to ma sens!

+1

Wreszcie zrobione z tą częścią. :) – Pankaj