2012-10-12 34 views
7

在我剛讀從小巧精緻的「手工」這個樣本:爲什麼#(哈希)小巧精緻的樣品

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); 

是#T的東西了特殊的語法?或者他們只是在那裏混淆我? :)

回答

13

是的,#意味着在TSQL中很重要 - 對於該db/schema,名爲foo的表是永久的。一個名爲#foo的表是一個臨時表 - 它只對該連接存在,並且在連接關閉或重置時被刪除。一張名爲##foo的表是一個全球臨時表,並且存在於任何地方,但意圖是暫時的。這主要用於批量轉換數據。

這裏使用#t是因爲表只存在於該連接上,所以我們可以輕鬆地重新運行測試。

此外,一個名爲@foo表可以是一個表可變表值參數,只存在對命令/ SPROC。

+0

感謝您的精心解答! – asgerhallas

相關問題