2012-01-23 15 views
45

Jak uzyskać strukturę tabeli tymczasowej, a następnie usunąć tabelę tymczasową. Czy istnieje sp_helptext dla tabel tymczasowych? Czy wreszcie można usunąć tabelę tymczasową w tej samej sesji lub oknie zapytań?

przykład:Uzyskaj strukturę tabeli temp (np. Wygeneruj skrypt sql) i wyczyść tabelę tymczasową dla bieżącej instancji.

select * 
into #myTempTable -- creates a new temp table 
from tMyTable -- some table in your database 

tempdb..sp_help #myTempTable 

Reference.

+0

Korzystanie współczynniki CTE w SQL Server wydaje się automatycznie spadek temp tabeli: https://technet.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx?f=255&MSPPError = -2147217396 – RetroCoder

Odpowiedz

78

Trzeba użyć cudzysłowów wokół nazwy tabeli temp i można usunąć temp tabeli bezpośrednio po użyciu drop table ....

select * 
into #myTempTable -- creates a new temp table 
from tMyTable -- some table in your database 

exec tempdb..sp_help '#myTempTable' 

drop table #myTempTable 
+5

Może dodać, że to rozwiązanie jest nieco przesadzone w zasobach systemowych. Jeśli potrzebna jest tylko struktura tabeli, dodaj "WHERE 0 = 1" na końcu zaznaczenia. – pkExec

+0

Czy istnieje powód, dla którego sp trwa tak długo? – Sal

9

O ile wiem, nie ma SP_HelpText dla tabel. Spróbuj tego:

Select * From tempdb.sys.columns Where object_id=OBJECT_ID('tempdb.dbo.#myTempTable'); 
3

exec sp_columns nazwa_tabeli;

przykład

sp_columns Exec pracowników;

1
Select * From tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '#yourtemp%' 
1

muszę być w stanie odtworzyć temp tabeli w skrypcie, więc użyłem ten kod generowania kolumn część instrukcji CREATE tabela:

SELECT char(9) + '[' + c.column_name + '] ' + c.data_type 
    + CASE WHEN c.data_type IN ('decimal') 
     THEN isnull('(' + convert(varchar, c.numeric_precision) + ', ' + convert(varchar, c.numeric_scale) + ')', '') 
     ELSE '' END 
    + CASE WHEN c.IS_NULLABLE = 'YES' THEN ' NULL' ELSE '' END 
    + ',' 
From tempdb.INFORMATION_SCHEMA.COLUMNS c 
WHERE TABLE_NAME LIKE '#myTempTable%' 

nie testowałem dla wszystkich sql datatypes, ale działało to dla int, float, datetime, money i bit.

Również - ApexSQL Complete (bezpłatnie) ma fajną funkcję, w której można eksportować wyniki siatki do oświadczenia Insert Into. Użyłem tego do załadowania utworzonej tabeli tymczasowej w moim skrypcie. ApexSQL Copy Results As Insert into statement

Powiązane problemy