it-swarm.it

Va bene inserire punti nei nomi dei database di SQL Server?

Se uso un nome di database con un punto in SQL Server (2005 o 2008), qualcosa come "MyApp.Sales", questo causerà problemi?

28
Sean Kearon

Tu can, ma non lo farei. Dovresti sempre racchiudere il nome del DB tra parentesi quadre come [MyApp.Sales].

Quindi, per ricapitolare: se apprezzi la tua sanità mentale, non farlo.

Penso che sia na pessima idea anche se tecnicamente possibile.

Nel corso degli anni ho scoperto che molte persone hanno difficoltà a comprendere la convenzione di denominazione in quattro parti anche se sembra abbastanza ovvio:

server_name.database_name.schema_name.object_name

Immagina cosa accadrà se vedranno qualcosa del genere:

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

o:

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

Mantenere le cose semplice è importante.

36

Nel caso in cui qualcun altro incontri questa domanda ...

Tieni presente che non è solo una cattiva idea perché gli utenti potrebbero essere confusi, ma anche perché alcuni strumenti potrebbero essere confusi.

Anche Microsoft stessa ha problemi con questo. Se si tenta di connettere il database a un foglio Excel utilizzando Microsoft Query (tramite ODBC), si ottiene una procedura guidata di configurazione che consente di scegliere il database a cui connettersi. Tuttavia, la scelta di un database che contiene un punto produrrà un errore che indica che non è stato possibile trovare il server. Sembra che la procedura guidata non controlli se i valori devono essere salvati e concatena ciecamente gli identificatori.

Ovviamente ci sono delle soluzioni, ma ti risparmi qualche problema non facendolo dall'inizio.

15
aKzenT

Non utilizzare il punto nei nomi di database, nomi di pubblicazioni, nomi utente. E consiglio vivamente di non usare mai un punto nel nome (colonna, tabella, vista, database, ecc.).

Aggiornamento: posso confermare che il segno meno, trattino "-" causa problemi simili.

Ecco cosa succede:

SQL Server utilizza script per uso interno come le procedure memorizzate dal sistema. Come già menzionato qui, i comandi che usi a volte ti costringono a mettere il nome tra parentesi e cioè (seriamente microsoft?) non (sempre) ok per l'utilizzo delle procedure memorizzate .

In effetti, non sono più in grado di ripulire le informazioni sull'abonnement perché la procedura memorizzata scorre attraverso tutti i database e non sfugge ai nomi dei database in modo propper. Questa iterazione è così complessa che non sono stato in grado di correggerlo in oltre 8 SP.

Inoltre non sono non in grado di usare MMC o script per modificare i conflitti di replica . Se ne hai uno (Uno!) database che ha un punto all'interno del suo nome, questi problemi si verificheranno ogni giorno su ogni pubblicazione.

Queste sono le ricorrenze che ho. Le azioni SQL complesse vengono elaborate in linguaggio sql e funzioneranno bene, se la base va bene.

Se si tenta di connettere il database a un foglio Excel utilizzando Microsoft Query (tramite ODBC), si ottiene una procedura guidata di configurazione che consente di scegliere il database a cui connettersi. - aKzenT

Questi errori possono essere trovati più spesso nel software di terze parti, quindi non utilizzare mai punti in ogni nome di qualsiasi cosa sul server sql.

8
Daniel

Ci sono molti caratteri consentiti nei nomi, ma la convenzione e il buonsenso limitano l'uso di caratteri speciali. '_' (trattino basso) è il separatore più sicuro provato e mantiene la facilità di leggibilità.

7
user48235

Stesso affare: il nome della chiave esterna non deve contenere punti.

Ho scoperto che se hai bisogno di rinominare un tale nome, allora avrai bisogno di parentesi per rendere sp_rename work (perché quando si rinomina una chiave esterna è necessario specificare lo schema).

Esempio:

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

Se si dimenticano le parentesi, viene visualizzato un errore: 15225

1
Ozzie