Trong SQL Server, sự khác biệt giữa bảng @, bảng # và bảng ## là gì?
Trong SQL Server, sự khác biệt giữa bảng @, bảng # và bảng ## là gì?
Câu trả lời:
#table
đề cập đến một bảng tạm thời cục bộ (chỉ hiển thị cho người dùng đã tạo nó).
##table
đề cập đến một bảng tạm thời toàn cầu (hiển thị cho tất cả người dùng).
@variableName
đề cập đến một biến có thể giữ các giá trị tùy thuộc vào loại của nó.
Hãy xem
#
và ##
các bảng là các bảng thực tế được biểu diễn trong cơ sở dữ liệu tạm thời. Các bảng này có thể có chỉ mục và thống kê, đồng thời có thể được truy cập trên các nhóm trong một phiên (trong trường hợp bảng tạm thời chung, bảng này có sẵn trong các phiên).
@Table là một biến bảng.
Để biết thêm: http://www.sqlteam.com/article/tempional-tables
Tôi sẽ tập trung vào sự khác biệt giữa #table và @table. ## table là một bảng tạm thời toàn cầu và đối với hồ sơ trong hơn 10 năm sử dụng SQL Server, tôi vẫn chưa gặp trường hợp sử dụng hợp lệ nào. Tôi chắc chắn rằng một số tồn tại nhưng bản chất của đối tượng khiến nó rất khó sử dụng được IMHO.
Phản hồi cho @whiner của @marc_s là hoàn toàn đúng: có một điều hoang đường phổ biến rằng các biến bảng luôn tồn tại trong bộ nhớ. Việc một biến bảng đi vào đĩa và hoạt động giống như một bảng tạm là điều khá phổ biến.
Dù sao, tôi khuyên bạn nên đọc về tập hợp các điểm khác biệt bằng cách làm theo các liên kết được chỉ ra bởi @Astander. Hầu hết sự khác biệt liên quan đến giới hạn về những gì bạn không thể làm với các biến @table.
CREATE TABLE #t
Tạo bảng chỉ hiển thị trên và trong khi KẾT NỐI đó, cùng một người dùng tạo kết nối khác sẽ không thể nhìn thấy bảng #t từ kết nối kia.
CREATE TABLE ##t
Tạo một bảng tạm thời hiển thị cho các kết nối khác. Nhưng bảng sẽ bị loại bỏ khi kết nối tạo kết thúc.
SqlConnection.Open()
với cùng một chuỗi kết nối là cùng một KẾT NỐI ?