2012-10-12 26 views
7

Tôi chỉ đọc mẫu này từ "bằng tay" Dapper:Tại sao # (băm) trong mẫu Dapper

connection.Execute(@" 
    set nocount on 
    create table #t(i int) 
    set nocount off 
    insert #t 
    select @a a union all select @b 
    set nocount on 
    drop table #t", new {a=1, b=2 }) 
    .IsEqualTo(2); 

Có phải # của t cú pháp đặc biệt cho một cái gì đó? Hay họ chỉ ở đó để gây nhầm lẫn cho tôi? :)

Trả lời

13

Có, # có nghĩa là một cái gì đó quan trọng trong TSQL - một bảng có tên foo là vĩnh viễn, cho db/lược đồ đó. Bảng có tên #foo là bảng tạm thời - nó chỉ tồn tại cho kết nối đó và bị xóa khi kết nối bị đóng hoặc đặt lại. Một bảng có tên là ##foo là một bảng tạm thời toàn cầu và tồn tại ở mọi nơi, nhưng được dự định là tạm thời. Điều này chủ yếu được sử dụng khi dữ liệu chuyển số lượng lớn.

Việc sử dụng #t ở đây để bảng chỉ tồn tại trên kết nối đó, vì vậy chúng tôi có thể chạy lại thử nghiệm một cách tầm thường.

Ngoài ra, một bảng tên @foo hoặc là một bảng biến, hoặc một bảng giá trị tham số, và chỉ tồn tại cho rằng lệnh/sproc.

+0

Cảm ơn câu trả lời rất phức tạp! – asgerhallas

Các vấn đề liên quan