Có cần sử dụng # để tạo bảng tạm trong máy chủ SQL không?


91

Có cần phải sử dụng #trước khi tạo bảng tạm thời trong máy chủ SQL không?

Thí dụ:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Đối với ItemBack1 có cần sử dụng #ký hiệu không?

Nếu không, thì #việc tạo bảng tạm thời có ích gì?


3
Đúng. # tạo bảng tạm thời. Nếu không có nó sẽ tạo ra một bảng.
Jeow Li Huan

Câu trả lời:


151

Đúng. Bạn cần đặt trước tên bảng bằng "#" (băm) để tạo bảng tạm thời.

Nếu bạn KHÔNG cần bảng sau này, hãy tiếp tục và tạo nó. Bàn tạm rất giống những chiếc bàn bình thường. Tuy nhiên, nó được tạo trong tempdb. Ngoài ra, nó chỉ có thể truy cập thông qua phiên hiện tại, tức là Đối với EG: nếu người dùng khác cố gắng truy cập bảng tạm thời do bạn tạo, anh ta sẽ không thể làm như vậy.

"##" (double-hash tạo bảng tạm thời "Chung". Các phiên khác cũng có thể truy cập.

Tham khảo liên kết bên dưới để biết Cơ bản về Bảng Tạm thời: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Nếu nội dung bảng của bạn ít hơn 5000 hàng & KHÔNG chứa các kiểu dữ liệu như nvarchar (MAX), varbinary (MAX), hãy cân nhắc sử dụng Biến bảng.

Chúng nhanh nhất vì chúng cũng giống như bất kỳ biến nào khác được lưu trữ trong RAM. Chúng cũng được lưu trữ trong tempdb, không phải trong RAM .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Thông tin thêm về các biến trong bảng: http://odetocode.com/articles/365.aspx


11
Trong SQL Server, cú pháp SELECT INSERT INTO @ ItemBack1 CHỌN column1, column2, someInt, someVarChar TỪ table2 ĐÂU table2.ID = 7
mhenry1384

8
Các bảng biến không được lưu trữ trong RAM, chúng cũng được lưu trữ trong tempdb. Tôi khuyên bạn không nên sử dụng các biến bảng trừ khi bạn hiểu một số nhược điểm của chúng, vì số lượng hàng của chúng được tự động đặt thành một và có thể dẫn đến kế hoạch xấu.
ConstantineK

Bạn có thể cung cấp nguồn cho các hạn chế 5000 hàng, nvarchar (tối đa), varbinary (tối đa) không? Điều này được cho phép, nhưng tôi không chắc tại sao nó không được khuyến khích.
Brad

1
Tôi cũng nghĩ rằng các biến bảng được lưu trữ trong bộ nhớ. Tôi đứng đã sửa: dba.stackexchange.com/a/16386/23720
Baodad

1
Tôi cũng sẽ chỉ nhận xét rằng thực tế là các biến bảng được lưu trữ trong tempdb. Tôi đang bình luận vì vậy có thể NHIỀU người đọc nhận xét và đưa nó vào đầu vì tôi quá mệt mỏi khi bước vào một công ty tư vấn cấp cao khi phải tranh luận với một nhân viên toàn thời gian thiếu hiểu biết và cố nói khác đi. Tôi đang nói về hàng chục công ty trong Fortune 500, rất vui khi thấy mọi người bình luận. SADLY, trừ khi OP này trả lời câu hỏi thực sự CHỈNH SỬA câu trả lời của họ, chúng ta sẽ tiếp tục có sự ngu dốt này tồn tại trong một thập kỷ nữa hoặc lâu hơn.
Tom Stickel

14

Sự khác biệt giữa hai bảng này ItemBack1và bảng #ItemBack1đầu tiên là liên tục (vĩnh viễn) trong khi bảng kia là tạm thời.

Bây giờ nếu hãy xem lại câu hỏi của bạn

Có cần sử dụng # để tạo bảng tạm trong máy chủ sql không?

Câu trả lời là , bởi vì không có điều này trước #bảng sẽ không phải là một bảng tạm thời, nó sẽ độc lập với tất cả các phiên và phạm vi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.