2009-03-29 11 views
46

Czy można nazwać moje tabele bazy danych, które są już słowami kluczowymi? W moim przypadku próbuję nazwać tabelę, która będzie trzymać moich użytkowników. Nazwa ta została nazwana Użytkownik, ale jest wyświetlana jako różowy w SQL Server Management Studio, więc zakładam, że jest to istniejąca tabela systemowa lub słowo kluczowe. Dzięki za radę.Tworzenie nazw tabel, które są zarezerwowanymi słowami/słowami kluczowymi w MS SQL Server

Oficjalna lista zarezerwowanych słów kluczowych: Reserved Keywords (Transact-SQL)

+0

Dla mysql: Oto odpowiedź: SELECT * FROM "keys" works - umieść nazwę tabeli w pojedynczych cudzysłowach w moim phpmyadmin. Dlatego jest w porządku. (ale nie zalecane). – ssaltman

Odpowiedz

87

powtórzyć ten trzykrotnie:

nie rób tego, nie będę NIE UŻYWAĆ REZERWOWANYCH SŁÓW!

podziękujesz mi!

+0

O tak. Bardzo dziwne rzeczy zdarzają się, gdy próbujesz zapytać o taki stół/pole za pomocą MS Query (który jest narzędziem do wyszukiwania MS Office). Nie zadziała, pomimo umieszczenia nawiasów na stronie Excel. W końcu zmienisz nazwę tabeli/pola. – GSerg

+2

Po co torturować ludzi, którzy utrzymują twój kod później, czy nawet siebie? – ojblass

+13

Z szacunkiem się nie zgadzam. W każdym razie dobrze jest zamieniać nazwy stołów. I każde narzędzie SQL, z którego korzystałem, zarówno MSFT, jak i trzecia strona, robi to automatycznie.Tak więc w praktyce nie robi to dużej różnicy. – Portman

7

Można użyć [USER], aby to zrobić. Jeśli to możliwe, użyj nazwy tabeli, która nie jest sprzeczna ze słowem kluczowym, aby uniknąć pomyłek i błędów.

59

Możesz tworzyć tabele o takiej samej nazwie jak słowa kluczowe. Jeśli "zacytujesz" nazwę tabeli, powinna ona działać. Domyślne cytaty w serwerze SQL są nawiasy kwadratowe []

CREATE TABLE [dbo].[user](
    [id] [bigint] NOT NULL, 
    [name] [varchar](20) NOT NULL 
) ON [PRIMARY] 
+3

Powinieneś zawsze podawać wszystkie nazwy pól. Nigdy nie wiesz, co może stać się zastrzeżonym słowem w przyszłej bazie danych. To nigdy nie robi żadnej szkody. – rjmunro

+0

Dzięki za to! Miałem już nazwy kolumn, które były zastrzeżonymi słowami kluczowymi i miałem już dość tych "odpowiedzi" na to pytanie (cóż, moje pytanie dotyczyło raczej dostępu, niż tworzenia), które zasadniczo były "nie". – ShaneK

+0

Przybiłeś to! dziękuję – GETah

8

Tak, to jest w porządku. W zapytaniach, które można umieścić [i] wokół nazwy tabeli tak, że SQL Server wie, że odnosimy się do stołu - tj

CREATE TABLE [User] ... 
SELECT * FROM [User] 
2

Jak wspomniano, można to zrobić, cytując nazwisko. Oczywiście powinieneś także zacytować to nazwisko za każdym razem, gdy go przywołasz - uwierz mi, szybko się starzeje.

Na marginesie, tylko dlatego, że kolory syntaktyczne SSMS słowo nie musi oznaczać, że jest to reserved word. Sql może być denerwujące w ten sposób. ;)

2

Podstawowa zasada dla nazw tabel i kolumn (lub lepszych nazw obiektów w ogóle):

Nie używaj niczego taki sam, lub nawet podobny do, zarezerwowanego słowa. Używaj tylko A-Za-z0-9 i podkreślenia. Zwłaszcza nie używaj spacji. Używaj tylko nazw, które nie wymagają ucieczki, a następnie nie używaj funkcji escaping jako testu ciągłego.

Ty i każdy, kto pracuje z tobą, lub kiedykolwiek będzie pracował nad twoim kodem, nie potrzebujesz żadnego zaostrzenia.

5

Siedzę w obozie, który mówi, że nazwy stołów powinny być w liczbie mnogiej, więc w twoim przypadku będą to Użytkownicy.

Podoba mi się ta konwencja, ponieważ ma dla mnie sens. Masz kolekcję użytkowników, więc zadzwoń do tego stołu. Dalej w dół, jeśli wyciągniesz pojedynczy wiersz, który może następnie wypełnić obiekt o nazwie Użytkownik.

Jeśli konwencja nakazuje użycie liczby pojedynczej dla nazw tabel używać czegoś innego np .: użytkownika, klienta itp

Zobacz także odpowiedź RacerX głównej!

Jak wcześniej wspomniano, jest całkiem OK, jeśli [Braket] nazwę.

+1

+1 do wielu nazw tabel. – Portman

+1

Używam również mnogiej trasy, aby uniknąć użycia zarezerwowanych słów kluczowych. Ponadto używanie zarezerwowanych słów kluczowych może prowadzić do nieprawidłowych problemów z podświetlaniem. – puk

0

Jak wszyscy inni powiedzieli, nie rób tego; jednak byłem w tej samej łodzi. Mam regułę, która mówi, że wszystkie moje tabele są przechowywane w liczbie pojedynczej. Organizacja nie Organizacje, Aktywa nie są aktywami a PartsCatalog ma wiele części itp.

Cóż, mam tabelę użytkowników, więc jak ją nazwać? Uciekłem z tego [Użytkownik]. Teraz żałuję tej decyzji, ponieważ zawsze zapominam o ucieczce od stołu; jednak nie wymyśliłem jeszcze lepszego imienia: Członek jest czołowym kandydatem.

+0

Ustawiłem użytkowników w tabeli "Person". :) – David

+0

Ale co, jeśli musisz modelować ludzi, którzy nie są użytkownikami? – JoshBerke

+0

Lepiej mieć inne imię, nawet jeśli jest niedoskonałe (czytaj: Członek), niż kontynuować otrzymywanie trafienia za każdym razem, gdy zapomnisz zacytować użytkownika. – JonathanHayward

4

Dla MS Query, znalazłem podwójne cytaty działa doskonale w kwerendzie.

select T1."Reference" 
from MyTable T1 
6

Użyj 'apostrof' dla Strings i "cudzysłów" dla nazw kolumn.

Przykład:

INSERT INTO AccountMovement 
("Date", Info) 
VALUES 
('2012/03/17', 'aa'), 
('2012/03/17', 'bb'), 
('2012/03/17', 'cc'), 
('2012/03/17', 'dd') 
0

nie jest dobry pomysł - z różnych powodów

więcej powodów DLACZEGO NIE 1) Oczywistym możliwy konflikt z nazwami zastrzeżonymi 2) jeżeli w ciągu dwóch lat, które mają być wykonaj globalną zamianę w swoim kodzie, powiedzmy "użytkownik" w polu formularza lub w dowolnym miejscu, w którym jest przykręcany przy użyciu ogólnych nazw 3) Jeśli musisz szukać okazji, które używają "użytkownika" w kodzie - wiesz gdzie to działa (mamy ponad milion linii kodu, zabiłoby nas).

CO ZROBILIŚMY 1) każda nazwa tabeli ma unikalny początek, taki jak O_nnn dla obiektów F_nnn dla danych finansowych ... zastosowaliśmy to samo dla pól takich jak opp_created dla okazji utworzono wcześniej, SUSR_RID dla odniesienia do ID użytkownika w ramach funkcji sprzedaży w porównaniu z OPUSR_RID operacyjne odniesienie do użytkownika ... 2) Oprócz prefiksu używamy tak oczywistych, jak to możliwe nazw, takich jak O_FlightArrivalTime, a nie O_FltAT. Dzisiejsze bazy danych nie wykazują obniżenia wydajności przy dłuższych nazwach. 3) Teraz, gdy używasz OF_FlightArrivalTime jako nazwy Formfield, łatwo znajdziesz to skojarzenie, ale globalne wyszukiwanie O_F ... może znaleźć tylko pole DB, wyszukiwanie OF_F ... pola formularza i _F .... obie.

0

Zdecydowanie odradzam używanie zastrzeżonego słowa kluczowego, tak jak robisz. Sposób, w jaki została zaprojektowana nasza baza danych, polega na prefiksowaniu nazw obiektów bazy danych, aby zapobiec występowaniu takich zjawisk. Oto na przykład szybka definicja tego, jak utworzyć tabelę "Użytkownik":

CREATE TABLE tblUser 
(
    intUserId INT 
    ,vchUsername VARCHAR(255) 
    ,vchEmailAddress VARCHAR(255) 
    ,bitIsAccountEnabled BIT 
    ,dteUpdated DATETIME 
    ,dteCreated DATETIME 
    ,intUpdateUserId INT 
) 

W ten sposób, gdy piszę zapytania. Nie mam problemu ze zrozumieniem, z jakimi typami danych mam do czynienia. Nie muszę też martwić się zastrzeżonymi słowami kluczowymi w nazwach tabel.

+7

Eww, węgierski zapis w bazie danych, tylko ..... nie. – EkoostikMartin

+0

Na początku, gdy czytałem "przedrostek", myślałem, że twoje nazwy kolumn to UserID, UserUsername, UserEmail itd. Ale węgierski zapis ... nie, po prostu nie. A co jeśli zdecydujesz zmienić typ danych kolumny? Musisz również zmienić nazwę kolumny ... –

Powiązane problemy