2012-10-12 10 views
7

Sólo estoy leyendo esto muestra del "manual" Dapper:Por qué los valores hash (#) en la muestra 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); 

son los # t de una sintaxis especial para algo? ¿O solo están allí para confundirme? :)

Respuesta

13

Sí, # significa algo importante en TSQL - una tabla llamada foo es permanente, para ese db/schema. Una tabla llamada #foo es una tabla temporal; solo existe para esa conexión, y se elimina cuando la conexión se cierra o se restablece. Una tabla llamada ##foo es una tabla temporal global, y existe en todas partes, pero tiene la intención de ser temporal. Esto se usa principalmente cuando se cambian los datos a granel.

El uso de #t aquí es para que la tabla solo exista en esa conexión, por lo que podemos volver a ejecutar la prueba trivialmente.

Además, una tabla llamada @foo es o bien una tabla de variables , o una tabla con valores de parámetros , y sólo existe para ese comando/sproc.

+0

Gracias por la respuesta muy elaborada! – asgerhallas

Cuestiones relacionadas