it-swarm-eu.dev

Je v pořádku vkládat tečky do názvů databází SQL Server?

Pokud použiji název databáze s tečkou v SQL Server (2005 nebo 2008), něco jako „MyApp.Sales“, způsobí to nějaké problémy?

28
Sean Kearon

Vy můžete, ale já bych ne. Vždy byste museli zabalit název DB hranatými závorkami, například [MyApp.Sales].

Takže rekapitulace: pokud si ceníte rozumu, nedělejte to.

Myslím, že je to velmi špatný nápad, i když je to technicky možné.

V průběhu let jsem zjistil, že mnoho lidí má potíže pochopit čtyřdílnou konvenci pro pojmenovávání, i když se to zdá docela zřejmé:

server_name.database_name.schema_name.object_name

Představte si, co se stane, když uvidí něco takového:

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

nebo:

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

Udržovat věci jednoduché je důležité.

36

V případě, že se na tuto otázku setká někdo jiný ...

Mějte na paměti, že to není jen špatný nápad, protože uživatelé mohou být zmateni, ale také proto, že některé nástroje mohou být zmateny.

I Microsoft má s tím problémy. Pokud se pokusíte připojit databázi k listu Excel pomocí Microsoft Query (přes ODBC), dostanete průvodce konfigurací, který vám umožní vybrat databázi, ke které se chcete připojit. Výběr databáze obsahující tečku však způsobí chybu, která uvádí, že server nebyl nalezen. Zdá se, že průvodce nekontroluje, zda je třeba hodnoty uniknout, a slepě identifikátory identifikuje.

Existují samozřejmě zástupná řešení, ale ušetříte si nějaké potíže tím, že to nebudete dělat od začátku.

15
aKzenT

Nepoužívejte období v názvech databází, publikačních názvech, uživatelských jménech. A důrazně doporučuji nikdy nepoužívat období v názvu (sloupec, tabulka, zobrazení, databáze atd.).

Aktualizace: Mohu potvrdit, že mínus, pomlčka "-" způsobuje podobné problémy

Tady je to, co se stane:

SQL Server používá skripty pro interní použití, jako jsou systémové uložené procedury. Jak již bylo zmíněno zde, příkazy, které používáte, vás někdy přinutí vložit jméno do závorek, a to (vážně microsoft?) není (vždy) v pořádku pro použití uložených procedur .

Ve skutečnosti už nejsem schopen vyčistit informace o odbavení , protože uložená procedura iteruje ve všech databázích a nepropouští názvy databází. Tato iterace je tak složitá, že jsem ji nedokázal napravit do více než 8 SP.

Navíc jsem schopen použít MMC nebo skripty k úpravám replikačních konfliktů . Pokud máte jeden (jeden!) databáze, která má ve svém názvu tečku, se tyto problémy objeví na everey db, každé publikaci.

To jsou události, které mám. Složité akce SQL jsou zpracovány v jazyce SQL a budou fungovat dobře, pokud je základna v pořádku.

Pokud se pokusíte připojit databázi k listu Excel pomocí Microsoft Query (přes ODBC), dostanete průvodce konfigurací, který vám umožní vybrat databázi, ke které se chcete připojit. - aKzenT

Tyto chyby se častěji vyskytují v softwaru třetích stran, takže nikdy nepoužívají tečky v každém jménu nic na serveru SQL.

8
Daniel

Ve jménech je povoleno mnoho znaků, ale použití zvláštních znaků omezuje konvence a zdravý rozum. '_' (podtržítko) je osvědčený nejbezpečnější oddělovač a udržuje snadnou čitelnost.

7
user48235

Stejné řešení: název cizího klíče by neměl obsahovat žádnou tečku.

Zjistil jsem, že pokud potřebujete přejmenovat takové jméno, budete potřebovat závorky, abyste udělali sp_rename work (protože při přejmenování cizího klíče musíte zadat schéma).

Příklad:

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

Pokud zapomenete závorky, zobrazí se chyba: 15225

1
Ozzie