2010-09-27 20 views
26

Mam definicję schematu w mojej bazie danych. Z wyjątkiem teraz za każdym razem robię instrukcji SQL muszę podać schemat ... SELECT * FROM [myschema].tableSchemat serwera SQL i domyślny schemat

ustawić domyślny schemat dla mojego użytkownika za pomocą Management Studio, a także prowadził ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] i wciąż otrzymuję „Tabela nieważny obiektu "podczas pisania zapytania bez schematu (SELECT * FROM table)

Czy istnieje sposób pisania SELECT * FROM table bez konieczności podawania nazwy schematu przez cały czas?

Jest na SQL 2005 przy użyciu SQL Management Studio.

+0

Czy wydajesz zapytanie SQL z jakiegoś kodu (Java, .Net) lub SQL Manager? –

+0

Ze studia zarządzania sql ... – pdiddy

Odpowiedz

43

Czy użytkownikowi SA, jeśli tak to nie będzie działać zgodnie z documentationSA użytkowników są zawsze domyślnie schematu dbo.

Wartość DEFAULT_SCHEMA jest ignorowany jeśli użytkownik jest członkiem sysadmin serwera. Wszystkie role sysadmin fixed server mają domyślny schemat dbo.

+0

W rolach serwera im publicznie i rola serwera sysadmin nie jest zaznaczona ... – pdiddy

+2

Uruchom te "SELECT SUSER_NAME()" i "WYBIERZ USER_NAME()" i powiedz mi swoje wyniki. –

+0

pierwszy to mój użytkownik, a drugi to dbo .... – pdiddy

4

kilka opcji:

  1. Czy Twój użytkownik wymienione w sekcji Security> Users (w SSMS)? Sprawdź właściwości Właściwości (kliknij prawym przyciskiem myszy nazwę) i zobacz, czy domyślny schemat jest ustawiony w kontekście bazy danych, a nie w instancji (co jest ustawiane przez ustawienie ALTER USER).
  2. Create a synonym na stole chcesz odwołać:

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

    ... co wpłynie na wszystkich, którzy nie wykorzystują co najmniej dwa nazwa notacji, w kontekście tej bazy danych. Read more about it here. Ale ostatecznie wiąże się to ze schematem.

  3. Sprawdź, czy baza danych zaznaczona w rozwijanym menu "Dostępne bazy danych" (lewy górny, po lewej stronie przycisku Wykonaj) jest prawidłowa.

  4. użyć trzech nazwa notacja przy określaniu stół (a view) referencje:

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

Moje pytanie dotyczyło tego, czy można uniknąć zapisywania nazw przez jakąś konfigurację w SSMS .... Nie chciałbym w tym zapytaniu uwzględniać całego pliku db, schematu, ponieważ może on być długi . Dostępne bazy danych są wybrane poprawnie. – pdiddy

+0

@pdiddy: Dodałem, że synonim to kolejna uwaga. Przepraszam, przegapiłem, że nie chcesz używać notacji nazw. –

+0

dla opcji 1, w jaki sposób mogę sprawdzić kontekst ...? – pdiddy

3

Jeśli nie chcesz korzystać z „Full kwalifikowany” nazw SQL, a następnie trzeba unikać tworzenia tabel za pomocą dowolnego konta lub roli, która nie używa domyślnego schematu "dbo". Dlaczego musisz zmienić domyślny schemat na użytkowniku, jeśli nie planujesz go użyć?

+0

Dlaczego powinien używać "pełnych kwalifikowanych" nazw SQL? Na przykład chce przechowywać pewne dane użytkownika w bazie danych. I może być wielu użytkowników korzystających z tego samego programu. Według schematu może on mieć własny stworzony stół. W naszych programach dzieje się to w ten sam sposób. Jedynym ważnym jest działający domyślny schemat! – Jettero