2010-03-02 46 views

回答

1

無法刪除前綴/模式,但你可以通過重新創建表的更改:

CREATE TABLE [whatever].[AgencyProfile](
     [AgencyId] [int] NOT NULL DEFAULT 
     [AgencyName] [nvarchar](256), 
     [Field 2] [nvarchar](256), 
     [Field 3] [uniqueidentifier] NOT NULL 
etc.... 
+0

它的客戶端策略是他們在這裏設置系統的方式。我無法改變這些政策。 – user279521 2010-03-02 20:16:14

+0

@ user279521:政策*不*使用dbo? – gbn 2010-03-02 20:26:45

+0

@Ricardo:不需要重新創建表格...請參閱我的回答請 – gbn 2010-03-02 20:29:20

1

爲什麼你需要? SQL將dbo架構中的所有對象都保留爲默認值。您不需要在SQL語句中使用模式 - SELECT * FROM AgencyProfile將會很好,因爲SQL將搜索dbo模式的AgencyProfile

您可以將對象放入您自己的模式中,但是您確實需要使用您的模式名稱來限定它們。

+0

當我做一個選擇,我得到一個 無效的對象名稱dbo.AgencyProfile「。 – user279521 2010-03-02 20:01:19

0

您不能刪除前綴/模式,但正如Andy指出的,如果數據庫中沒有其他模式,則不必使用它。

1

架構是對象的組成部分:你只能從指目標代碼刪除

有在編譯的時候打了性能,因爲它解決什麼架構的對象是英寸

SELECT * FROM foobar是不一樣的SELECT * FROM dbo.foobar,並要求進行檢查,看foobar處於何種模式也就是說,在去dbo.foobar之前,它會查找[domain\user].foobar

"Execution Plan Caching and Reuse"

... 

以匹配新的SQL語句,以現有的算法,在緩存中未使用 執行計劃需要 所有對象引用是完全合格的 。例如,第一 這些SELECT語句不與現有計劃相匹配 ,第二 匹配:

SELECT * FROM Contact 

SELECT * FROM Person.Contact 

而對於NT連接的時候無法指定默認的架構,以便不能避免這種情況

如果你想SCHEMABINDING在視圖等等,那麼你必須限定模式。

這遠遠超過了「代碼混亂」

編輯:別處您的評論後...

您已經運行創建表沒有模式,所以你有一個對象[domain\user].AgencyProfile 。當然dbo.AgencyProfile不存在

你需要運行'ALTER AUTHORIZATION ON [domain\user].AgencyProfile TO dbo'它取代sp_changeobjectowner