2012-10-12 7 views
7

私はちょうどDapperの「マニュアル」からこのサンプルを読んでいる:はなぜ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); 

は、#1のTさんは、何かのために特別な構文はありますか?それとも、彼らは私を混乱させるだけですか? :)

答えて

13

はい、#は、そのdb/schemaに対して、fooという名前のテーブルが永続的であることを意味します。 #fooという名前の表は一時表です。その接続はの場合はのみ存在し、接続がクローズまたはリセットされると削除されます。テーブル##fooは、グローバルテンポラリテーブルであり、どこにでも存在しますが、一時的なものです。これは主にデータをバルクシフトするときに使用されます。

ここで#tを使用すると、その接続上にテーブルが存在するだけなので、テストを簡単に再実行できます。

はまた、@foo名前テーブルがテーブル可変、またはテーブル値パラメータのいずれかである、唯一そのコマンド/ SPROCに対する必要性が存在します。

+0

非常に精巧な答えをありがとう! – asgerhallas

関連する問題