Sql-Server

無需指定表的模式即可查詢

  • May 8, 2020

我將一堆表從 SQL Server 2000 導入到我的 2008 數據庫中。所有導入的表都以我的使用者名為前綴,例如:erpadmin.tablename.

在表屬性中,它將“erpadmin”列為數據庫模式。當我編寫查詢時,我現在必須包含“erpadmin”。在所有令人困惑的表名前面。

目前結果:

select *
from erpadmin.tablename

期望的結果:

select *
from  tablename

如果您想像在 SQL Server 2000 中一樣重新使用 dbo 架構,可以將表移回 dbo 架構:

ALTER SCHEMA dbo TRANSFER erpadmin.tablename;

如果您喜歡使用非 dbo 架構,另一種方法是將使用者的預設架構設置為,erpadmin然後如果您不指定架構,它將使用它作為預設架構。(sysadmin 固定伺服器角色的成員預設忽略DEFAULT_SCHEMA和使用dbo。)

ALTER USER erpadmin WITH DEFAULT_SCHEMA = erpadmin;

不過,您擁有的兩部分名稱 (schema.table) 是一個很好的習慣,因此您可以明確指出您所指的是哪個表。某些功能要求您使用由兩部分組成的名稱,索引視圖就是一個範例。

這是在訪問數據庫對象時為什麼應該指定模式名稱的經典案例。如果未指定它並且您嘗試訪問非預設模式中的對象,那麼您將遇到您現在看到的問題。

真正的解決方法是將您的應用程序(或您現在擁有的任何導致問題的查詢代理)更改為明確的。

當我編寫查詢時,我現在必須包含“erpadmin”。在所有令人困惑的表名前面。

這並不令人困惑,這是一個明確的命名約定。我建議您堅持使用該命名法,以避免對象混洗和不一致。

引用自:https://dba.stackexchange.com/questions/42955