天天看點

SQL動态表查詢

在程式設計過程中,經常會遇到需要根據使用者的選擇進行查詢的情況,這時,使用者不同的選擇可能需要查詢不同的表名,而且這個表名可能還不宜事先在程式中定死,需要能動态的随機選擇。當然還包括表名和使用者的某些資訊相關,可能不同的使用者需要進入不同的表,甚至表名的一部分就是使用者名的一部分,等等。對于這些情況,我是使用EXEC語句進行動态甚至動态跨伺服器進行查詢。我記得剛開始學習SQL語句的時候花了不少時間來找方法,現在将這個方法記下來和有興趣的人共同分享。

例程如下:

DECLARE @TABLE VARCHAR(50)

SET @TABLE = 'dbo.Mfg_SHOPCAL'

這裡主要是使用了EXECUTE(可以簡寫成EXEC)語句。這個語句功能十分強大,利用它可以在其他程式中随意建構SQL語句,增加了程式的靈活性。

EXEC的主要作用是執行 Transact-SQL 批中的指令字元串、字元串或執行下列子產品之一:系統存儲過程、使用者定義存儲過程、标量值使用者定義函數或擴充存儲過程。

SQL Server 2005 擴充了 EXECUTE 語句,以使其可用于向連結伺服器發送傳遞指令。此外,還可以顯式設定執行字元串或指令的上下文。

EXEC的語句規則如下:

指定執行語句的上下文。有關詳細資訊,請參閱了解執行上下文。

LOGIN 指定要模拟的上下文是登入名。模拟範圍為伺服器。 USER 指定要模拟的上下文是目前資料庫中的使用者。模拟範圍隻限于目前資料庫。對資料庫使用者的上下文切換不會繼承該使用者的伺服器級别權限. 重要事項: 當到資料庫使用者的上下文切換處于活動狀态時,任何對資料庫外部資源的通路嘗試都會導緻語句失敗。這包括 USE database 語句、分布式查詢和使用三部分或四部分辨別符引用其他資料庫的查詢。若要将上下文切換的範圍擴充到目前資料庫之外,請參閱使用EXECUTE AS 擴充資料庫模拟。 'name' 有效使用者或登入名。name 必須是 sysadmin 固定伺服器角色成員或分别為sys.database_principals或sys.server_principals的主體。 name 不能為内置帳戶,如 NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService 或NT AUTHORITY\LocalSystem。 [N] 'command_string' 常量字元串,包含要傳遞給連結伺服器的指令。如果包含N,則字元串将解釋為nvarchar 資料類型。 AT linked_server_name 指定對linked_server_name 執行command_string,并将結果(如果有)傳回用戶端。linked_server_name 必須引用本地伺服器中的現有連結伺服器定義。連結伺服器使用sp_addlinkedserver定義。

     本文轉自fengyp 51CTO部落格,原文連結:http://blog.51cto.com/fengyp/77220,如需轉載請自行聯系原作者