問題就是兩個過程可以同時讀取空閑票數,并且都可以預約一張票,即使是那里已經沒有空余的了。我需要一種方法來防止一個過程在另一個過程運行add_ticket程序,但是還沒有插入一張新票的時候讀取空票的數量。在這種情況下,SET TRANSACTION ISOLATION LEVEL不管用了,我說的對嗎?
專家回答:
你是正確的;更高的隔離級別也不會保證多個讀者去同時去讀取同一個數據行。然而,還有幾種方法你可以完成這項工作。例如,你可以給每個座位分配一個惟一的標識符(意思是,惟一鍵——不一定是GUID),并且創建一個描述哪些座位已經被預訂了的表。在表上放一個 UNIQUE約束,你就可以確保同一個座位不會被插入兩次了。
就是說,我認為一個更有趣的方法就是使用SQL Service Broker。你可以為每個公交建立一個會話,并且將這個會話的句柄存放在一個表中,讀者在執行RECEIVE之前可以參考這個表。通過這種方式,讀者就可以正確地過濾。公共汽車上的每個座位都插一個消息到隊列中。讀者就可以簡單地RECEIVE到所需的消息(在這個過程中,預定公共汽車上的座位)。 Service Broker會確保沒有消息會被接受兩次,也就是說你不會再遇到并發問題了。
SQL Server2005中取代了查詢分析器
問題提交于2005年12月9日
我知道SQL Server2005中不再會有查詢分析器了。那么還有什么工具具有類似的功能?
專家回答:
你是對的。查詢分析器和企業管理器都從SQL Server中刪除了。取代它們的是一個工具,SQL Server 管理套件(SQL Server Management Studio)。這個工具具有前任的大多數特性,但是擁有升級后的用戶界面和很多經過改善的功能。我覺得大多數的數據庫管理員都會發現這是一個很好的升級。
如果你想要了解更多有關SQL Server管理套件的新特性的信息,請閱讀SearchSQLServer.com 上有關這個話題的文章。
SQL vs. T-SQL
問題提交于2006年7月25日
親愛的Adam Machanic:你能給我一些有關SQL和 T-SQL相比較的詳細信息嗎?使用這兩者之間的區別和分別的好處是什么?
專家回答:
SQL是結構化查詢語言,是ANSI/ISO 認可的標準數據庫語言。SQL Server的實現語言叫做Transact-SQL (T-SQL)。T-SQL基本上是根據1992年發表的ISO標準出現的,在1999年的標準上稍加修改。此外,微軟還進行了各種私有的加強。
標準SQL和T-SQL之間有很多區別——太多了,這里就不說了。還有,如果你在SQL Server上工作,那么使用這些私有的擴展是有好處的。由于許多SQL Server的特性的本質,你不使用非標準的命令的話,將會有很多強大的功能無法實現。如果你想要看看你的SQL是否符合標準,你可以使用SET FIPS_FLAGGER命令。
SQL Server 2005中的索引類別
文章來源于領測軟件測試網 http://www.kjueaiud.com/