簡體   English   中英

SQL Server架構和默認架構

[英]SQL server schema and default schema

我的數據庫中有一個架構定義。 除了現在每次我做一個sql語句,我必須提供模式... SELECT * FROM [myschema].table

我使用管理工作室為我的用戶設置了默認架構,並且還運行了ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] ,在編寫沒有架構的查詢時,我仍然得到無效對象'table'(SELECT * FROM table)

有沒有辦法編寫SELECT * FROM table而不必一直指定模式名稱?

它是在SQL 2005上使用SQL Management Studio。

用戶是SA ,如果是這樣,它將無法工作,根據文檔 SA用戶總是默認為dbo架構。

如果用戶是sysadmin固定服務器角色的成員,則忽略DEFAULT_SCHEMA的值。 sysadmin固定服務器角色的所有成員都具有dbo的默認架構。

幾種選擇:

  1. 您的用戶是否列在安全>用戶(SSMS)下? 檢查屬性 (右鍵單擊名稱),查看是否在數據庫的上下文中設置了默認架構 ,而不是實例(這是ALTER USER設置的實例)。
  2. 為要引用的表創建同義詞

     CREATE SYNONYM table_name FOR [your_db].[your_schema].table_name 

    ...這將影響在該數據庫的上下文中不使用至少兩個名稱表示法的每個人。 在這里閱讀更多相關信息 但它最終與架構相關聯。

  3. 檢查在“可用數據庫”下拉列表中選擇的數據庫(“執行”按鈕左上角)是否正確。

  4. 指定表(和視圖)引用時使用三個名稱表示法:

     SELECT * FROM [your_db].[your_schema].table_name 

如果您不想使用“完全限定”的SQl名稱,則需要避免使用未使用分配的“dbo”默認架構的任何帳戶或角色創建表。 如果您不打算使用它,為什么還需要更改用戶的默認架構?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM