2012-01-23 6 views
45

Làm cách nào để lấy cấu trúc bảng tạm thời sau đó xóa bảng tạm thời. Có một sp_helptext cho bảng tạm thời? Cuối cùng là nó có thể sau đó xóa bảng tạm thời trong cùng một phiên hoặc cửa sổ truy vấn?

Ví dụ:Nhận cấu trúc bảng tạm thời (như tạo kịch bản lệnh sql) và bảng tạm thời rõ ràng cho trường hợp hiện tại

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

tempdb..sp_help #myTempTable 

Reference.

+0

Sử dụng CTE trong Sql Server có vẻ như thả bảng tạm thời tự động: https://technet.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx?f=255&MSPPError = -2147217396 – RetroCoder

Trả lời

78

Bạn cần phải sử dụng dấu ngoặc kép quanh tên bảng temp và bạn có thể xóa các bảng tạm thời ngay sau khi sử dụng 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

Tôi có thể thêm rằng giải pháp này hơi quá mức đối với tài nguyên hệ thống. Nếu chỉ cần cấu trúc bảng, hãy thêm "WHERE 0 = 1" vào cuối lựa chọn. – pkExec

+0

Có lý do nào khiến sp này mất quá nhiều thời gian không? – Sal

9

Miễn là tôi biết không có SP_HelpText cho bảng. Hãy thử điều này:

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

exec sp_columns table_name;

ví dụ

exec sp_columns employees;

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

tôi cần để có thể tái tạo một bảng tạm thời trong một kịch bản, vì vậy tôi sử dụng mã này tạo ra các cột một phần của câu lệnh CREATE TABLE:

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%' 

tôi đã không kiểm tra đối với tất cả sql datatypes, nhưng điều này làm việc cho int, float, datetime, money, và bit.

Đồng thời - ApexSQL Complete (miễn phí) có một tính năng tuyệt vời nơi bạn có thể xuất kết quả lưới thành câu lệnh Insert Into. Tôi đã sử dụng điều này để tải bảng tạm thời đã tạo này trong tập lệnh của tôi. ApexSQL Copy Results As Insert into statement