it-swarm.dev

Czy można wstawiać kropki w nazwach baz danych programu SQL Server?

Jeśli użyję nazwy bazy danych z kropką w SQL Server (2005 lub 2008), coś w rodzaju „MyApp.Sales”, czy spowoduje to jakieś problemy?

28
Sean Kearon

Ty możesz, ale nie zrobiłbym tego. Zawsze będziesz musiał zawijać nazwę DB nawiasami kwadratowymi, takimi jak [MyApp.Sales].

Podsumowując: jeśli cenisz swoje zdrowie psychiczne, nie rób tego.

Myślę, że to bardzo zły pomysł nawet jeśli jest to technicznie możliwe.

Przez lata dowiedziałem się, że wiele osób ma problemy ze zrozumieniem czteroczęściowej konwencji nazewnictwa, chociaż wydaje się to dość oczywiste:

server_name.database_name.schema_name.object_name

Wyobraź sobie, co się stanie, jeśli zobaczą coś takiego:

MAIN-SQL.[MyApp.Sales].hr.CompetitorsProducts

lub:

[MAIN-SQL\EXPRESS].[MyApp.Sales].sch_HR.[Products From.Our-Competitors]

Utrzymywanie rzeczy proste jest ważne.

36

Na wypadek, gdyby ktoś napotkał to pytanie ...

Pamiętaj, że nie jest to zły pomysł, ponieważ użytkownicy mogą być zdezorientowani, ale także dlatego, że niektóre narzędzia mogą się mylić.

Nawet sam Microsoft ma z tym problemy. Jeśli spróbujesz połączyć bazę danych z arkuszem Excel za pomocą Microsoft Query (przez ODBC), pojawi się kreator konfiguracji, który pozwala wybrać bazę danych, z którą chcesz się połączyć. Jednak wybranie bazy danych zawierającej kropkę spowoduje błąd informujący, że nie można znaleźć serwera. Wygląda na to, że kreator nie sprawdza, czy wartości wymagają ucieczki, i ślepo konkatenuje identyfikatory.

Istnieją oczywiście obejścia, ale oszczędzasz sobie kłopotów, nie robiąc tego od samego początku.

15
aKzenT

Nie używaj kropki w nazwach baz danych, nazwach publikacji, nazwach użytkowników. I zdecydowanie zalecam, aby nigdy nie używać kropki w nazwie (kolumna, tabela, widok, baza danych itp.).

Aktualizacja: Potwierdzam, że minus, myślnik „-” powoduje podobne problemy.

Oto co się dzieje:

SQL Server używa skryptów do użytku wewnętrznego, takich jak systemowe procedury składowane. Jak już wspomniano tutaj, używane polecenia czasami zmuszają cię do umieszczenia nazwy w nawiasach, a to znaczy (poważnie Microsoft?) nie (zawsze) w porządku dla użycia procedur składowanych .

W rzeczywistości nie jestem już nie jestem w stanie wyczyścić informacji o połączeniu , ponieważ procedura przechowywana iteruje przez wszystkie bazy danych i nie unika poprawnie nazw baz danych. Ta iteracja jest złożona, że ​​nie byłem w stanie załatać jej w ponad 8 SP.

Poza tym nie jestem niezdolny do używania MMC lub skryptów do edycji konfliktów replikacji . Jeśli masz jeden (Jeden!) baza danych, która ma kropkę w nazwie, problemy te będą występować na każdej bazie danych w każdej publikacji.

To są moje wystąpienia. Złożone akcje SQL są przetwarzane w języku SQL i będą działać poprawnie, jeśli baza będzie w porządku.

Jeśli spróbujesz połączyć bazę danych z arkuszem Excel za pomocą Microsoft Query (przez ODBC), pojawi się kreator konfiguracji, który pozwala wybrać bazę danych, z którą chcesz się połączyć. - aKzenT

Błędy te częściej można znaleźć w oprogramowaniu innych firm, więc nigdy nie używaj kropek w każdej nazwie czegokolwiek na serwerze sql.

8
Daniel

W nazwach dozwolonych jest wiele znaków, ale konwencja i zdrowy rozsądek ograniczają użycie znaków specjalnych. „_” (podkreślenie) to sprawdzony i najbezpieczniejszy separator zapewniający łatwość odczytu.

7
user48235

Ta sama oferta: nazwa klucza obcego nie powinna zawierać żadnej kropki.

Odkryłem, że jeśli musisz zmienić nazwę takiego imienia, będziesz potrzebować nawiasów, aby sp_rename praca (ponieważ zmieniając nazwę klucza obcego, musisz określić schemat).

Przykład:

sp_rename '[MySchema].[MyFKName.With.Dots]' 'NewFKName' 'OBJECT'

Jeśli zapomnisz nawiasów, pojawi się błąd: 15225

1
Ozzie