SQL Server 2005中synonyms的正確用法
以下的文章主要是對SQL Server 2005數據庫中synonyms的具體使用以及對其在實際應用中的優點與缺點的介紹,在世紀工作中我所面臨的問題是,在product數據庫中把創建的表進行歸檔,因為隨著數據庫的增長,現在需要把它們移走。
同時,這些歸檔的表被幾項工作使用,而且它還在應用程序的代碼中被調用。這樣移動它們就是一個非常復雜
在我的新工作中,我面臨著一個問題,在product數據庫中把創建的表進行歸檔,因為隨著數據庫的增長,現在需要把它們移走。同時,這些歸檔的表被幾項工作使用,而且它還在應用程序的代碼中被調用。這樣移動它們就是一個非常復雜的過程。我希望能找到一種方法,盡可能減輕開發人員必須得完成的工作量,因為他們的時間非常有限。請問在有限時間內按要求把表進行歸檔的***方法?
專家解答
在SQL Server 2005中有一個特性,能解決這一問題,并且能提供進一步地優化和工具設備, 這個特征就是SQL Server 2005中的同義詞(SYNONYMs)。同義詞(SYNONYM)是SQL Server 2005中新特性。它是一種在已有的或潛在的新對象中給予的別名。它只是一個指針或者參數,所以它不被當作是一個對象。
為了創造一個同義詞(SYNONYM),您需要有創造同義詞(SYNONYM)的權限。 如果您是系統管理員或db_owner,那么您將擁有這些權限并且可以授予這個權限給其他用戶。此外,如果你需要創建一個跨越數據庫的同義詞,那么需要另一數據庫的權限。
下面是一個例子,用來在一個數據庫中創建同義詞(SYNONYM),而在數據庫中引用另一個對象:
- USE AdventureWorks
- GO
- CREATE SYNONYM MySyn FOR Production.Location
- GO
要檢查這些工作,您可以在SYNONYM的使用過程中使用下面的查詢語句:
- SELECT * From MySyn
下面這又是一個的例子,它是在一個數據庫中創建同義詞(SYNONYM),而在另外一個數據庫中引用這個對象:
- USE master
- GO
- CREATE SYNONYM dbo.MySyn FOR AdventureWorks.Production.Location
- GO
為了獲得同義詞(SYNONYMs)中所有變化的數據,可以使用下面的命令:
- SELECT * FROM sysobjects
- WHERE xtype = 'SN'
- ORDER BY NAME
刪除同義詞(SYNONYM)可以使用下面的命令:
- USE AdventureWorks;
- GO
- DROP SYNONYM MySyn
- GO
同義詞(SYNONYM)非常有用,SQL Server 2005中使用synonyms的優缺點可以創造以下這些:
表
視圖
匯編的存儲過程,表值函數,族聚
SQL標量函數
SQL存儲過程
SQL表值函數
內嵌的SQL表值函數
本地和全局的臨時表
復制篩選過程
擴展存儲過程
SQL Server 2005中使用synonyms的優點
同義詞(SYNONYM)提供一個抽象層以上引用的對象
允許更改復雜(多部分)和冗長的名稱,用一個簡化的別名作為在同一臺服務器上的寄存對象。
能靈活改變對象的位置而無需變動現有的程序代碼。
在同一個數據庫中創建SYNONYMs,來為老的應用程序提供向后兼容性,以避免刪除或重命名對象。
如果你給了前端查詢工具(例如電子數據表和Access鏈接表)到這些數據表的直接鏈接,那么SYNONYMs是很有用的。
SQL Server 2005中使用synonyms的缺點
同義詞(SYNONYMs)綁定到引用的對象是非常松散的。因此,您在刪除被引用的任何其他數據庫對象的同義詞的時候,沒有得到任何的提示或者警告。
同義詞是不允許鏈接的。這就說明你不能在一個同義詞中創建另一個同義詞。
會消耗更多的對象名稱,就像如果同義詞存在了,就不能再創建一個與同義詞名稱一樣的表。
同義詞創建了對象后,在運行的時候就開始被檢查,它并不是檢查創建的時間,也就是說如果您作出任何相關的錯誤,例如拼寫錯誤,同義詞就會被創建,當你訪問這個對象時你就會得到一個錯誤信息。
同義詞不能引用在一個DDL聲明中。
總結
你可以在現有的數據庫或其它數據庫中創建一個同義詞做為參考對象。在同義詞使用的時候,定義一個簡單的別名也許是***的選擇,這樣就不需要通過大量的移動或者重命名對象做重復工作。
【編輯推薦】
- SQL Server 數據導入的實際行為規范描述
- SQL Server 2000的安全策略的正確打造
- MS SQL Server數據庫快速獲得表的記錄總數步驟
- SQL Server DateTime數據類型的另類解讀
- SQL Server identity列,美中不足之處