Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lợi ích của việc sử dụng cú pháp Khối mã hàng trong câu lệnh chèn T-Sql là gì?

Đúng vậy, có sự khác biệt về hiệu suất khá lớn giữa:

declare @numbers table (n int not null primary key clustered);

insert into @numbers (n)
values (0)
     , (1)
     , (2)
     , (3)
     , (4);

declare @numbers table (n int not null primary key clustered);

insert into @numbers (n) values (0);
insert into @numbers (n) values (1);
insert into @numbers (n) values (2);
insert into @numbers (n) values (3);
insert into @numbers (n) values (4);

Thực tế là mọi insert tuyên bố có giao dịch ngầm của riêng nó đảm bảo điều này. Bạn có thể tự mình chứng minh điều đó một cách dễ dàng bằng cách xem các kế hoạch thực thi cho từng câu lệnh hoặc định thời gian thực thi bằng cách sử dụng set statistics time on; . Có một khoản chi phí cố định liên quan đến việc "thiết lập" và "cắt bỏ" ngữ cảnh cho mỗi phần chèn riêng lẻ và truy vấn thứ hai phải trả hình phạt này năm lần trong khi truy vấn đầu tiên chỉ trả một lần.

Phương thức danh sách không chỉ hiệu quả hơn mà bạn còn có thể sử dụng nó để tạo bảng dẫn xuất:

select *
from (values
    (0)
  , (1)
  , (2)
  , (3)
  , (4)
) as Numbers (n);

Định dạng này có giới hạn khoảng 1.000 giá trị và cho phép bạn tham gia và lọc danh sách của mình trước khi được chèn. Người ta cũng có thể nhận thấy rằng chúng tôi không bị ràng buộc với insert tuyên bố ở tất cả! Là một bảng thực tế, cấu trúc này có thể được sử dụng ở bất kỳ đâu mà tham chiếu bảng sẽ hợp lệ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thiết lập và cấu hình nhóm luôn sẵn sàng trong SQL Server

  2. Nhập hàm EF không nhận ra các cột do StoredProc trả về

  3. Cách bật RPC Out bằng T-SQL

  4. Cách thêm cột động vào bảng hiện có

  5. MVC4:UserIsInRole - Không thể kết nối với cơ sở dữ liệu SQL Server