2015-03-30 70 views
0

我被要求在舊的asp-classic應用程序中進行一些更改。生產服務器和服務器用於測試和開發20多臺路由器,而我的打字和看到這種類型之間的時間間隔是非常可怕的。所以我在這裏設置了一臺服務器,就像安裝了MS SQL Server 2008 R2的他們(MS Server 2008)一樣。我以爲我配置我的數據庫就像他們的。他們有幾百行數千行的舊腳本。如何在MS SQL Server 2008 R2中不使用完全限定的表名稱

我備份了遠程端的測試數據庫,將它複製到我的服務器並在那裏恢復。我複製了他們已經結束的劇本。網站已啓動並正在運行。但是,任何需要查詢數據庫的東西都會產生錯誤「無效的對象名稱atable」。查看它們的代碼並且沒有任何地方有完全限定的名稱。我登錄到遠程服務器啓動Management Studio我問他們是否可以更改所有的代碼來使用完全限定的名字,答案是否定的,我問他們是如何配置數據庫的,答案是前者(他們喜歡它)

所以我的問題;是否有在MS SQL Server 2008默認不使用完全限定名稱的配置選項?他們如何避免不使用數據庫,所有者,他們的代碼中的模式?我作爲應用程序用戶登錄,似乎也不幫助。

請,我知道我們應該使用完全合格的名稱作爲最佳實踐。我讀過關於績效收益/損失的評論。當您自動編寫腳本創建數據庫腳本時,他們的數據庫實例使用模式名稱。如果我使用該模式名稱來爲表名稱加上前綴,那麼一切都很好。他們只是不希望我在編輯或爲他們創建的任何腳本中這樣做。

+0

當您將用戶更改爲全部具有相同的默認模式(dbo,我假設所有這些對象都存在)時會發生什麼?由於你指出的原因,它仍然會很糟糕,但至少沒有人需要糾正他們的代碼。 2015-03-30 20:56:56

+0

只有一個用戶。他們的應用程序頁面使用該用戶標識登錄。 – Madcowtricks 2015-03-30 21:02:14

+0

糟糕,點擊「添加評論」的速度太快。這些表由該用戶擁有,並且模式名稱與用戶的名稱相匹配。 – Madcowtricks 2015-03-30 21:03:33

回答

0

未指定對象的分辨率順序(select * from table1)是sys,然後是用戶的默認模式,然後是最終的dbo。因此,SQL Server(給定數據庫上下文)將在sys模式中查找table1,然後查找指定的模式(可能是dbo),最後是dbo。只要一切都在dbo(這是非常糟糕的做法,但你堅持),一切都會被發現。它就像使用一個房間來存儲一切。

我曾經爲一位非常聰明的經理工作,他支持很多數據庫,這使得它將所有對象標識爲三個部分名稱-databasename.schema.object,但我知道微軟打算停止支持這種類型的未來的名字解析。但至少它非常常見,以查看腳本中所有對象的schema_name.object_name。

相關問題