@table_variable hoặc #temp_table


11

Tôi có một biến loại bảng do người dùng xác định lớn có 129 cột. Tôi sẽ lưu trữ khoảng 2000-3000 bản ghi trong biến bảng này tại một thời điểm và chuyển nó đến các quy trình và chức năng được lưu trữ khác nhau để có được dữ liệu bổ sung và thực hiện sửa đổi. Những dữ liệu bổ sung và sửa đổi mới này sau đó sẽ được lưu trữ trong một biến bảng mới cùng loại và được trả về thủ tục lưu trữ nguồn thông qua một OUTPUTtham số. (Điều này là do tham số loại bảng chỉ có thể được truyền dưới dạng READONLY.)

Đây là mã giả của tôi:

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

Tôi nên sử dụng một @table_variablehoặc #temp_table?


Câu trả lời:


12

Có hai blog bạn nên xem. Đầu tiên ( ở đây ) là so sánh các biến bảng và bảng tạm thời. Đó là từ năm 2008 và vẫn phù hợp với SQL Server 2008 R2.

Mục blog thứ hai ( ở đây ) liên quan đến một số quan niệm sai lầm (các khái niệm bị bỏ lỡ) liên quan đến Biến Bảng; bao gồm lập chỉ mục một biến bảng.

Cả hai mục blog, bài viết này, được viết bởi Gail Shaw.

Tôi tin rằng một mục nói với bạn đang tìm kiếm là Biến bảng có thể không được chuyển giữa các thủ tục được lưu trữ trong khi Bảng tạm thời có thể được chuyển qua giữa các thủ tục được lưu trữ. Biến bảng gần nhất đi qua giữa các thủ tục được lưu trữ là Loại bảng do người dùng xác định.

Truyền Bảng biến thành TVP cho thủ tục được lưu trữ có yêu cầu phải được xác định là tham số READ-CHỈ. Điều này ngụ ý sẽ có nhiều bản sao của Biến bảng nếu bạn muốn trả về một bản sao đã sửa đổi của nó.

Tất cả đã nói, việc chuyển giữa các thủ tục được lưu trữ có thể được phục vụ tốt hơn bởi Bảng tạm thời khi bạn muốn trả về cấu trúc được truyền với các giá trị được cập nhật.


5

Không có gì tốt hơn là thử cả hai, nhưng tôi thấy #tempTables hoạt động tốt hơn khi bạn nhận được hàng trăm hồ sơ.


3
Thêm vào đó là thực tế là các bảng tạm thời có thể có các chỉ mục, có số liệu thống kê, trong khi các biến bảng chỉ có thể có PK. Bạn có một số chi tiết ở đây .
Mary
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.