Posso colocar pontos nos nomes dos bancos de dados do SQL Server?

27

Se eu usar um nome de banco de dados com um ponto no SQL Server (2005 ou 2008), algo como "MyApp.Sales", isso causará problemas?

Sean Kearon
fonte

Respostas:

60

Você pode , mas eu não faria. Você sempre teria que colocar o nome do banco de dados entre colchetes, como [MyApp.Sales].

Então, para recapitular: se você valoriza sua sanidade, não faça isso.

Eric Humphrey - lotes de ajuda
fonte
36

Eu acho que é uma péssima idéia, mesmo que tecnicamente possível.

Ao longo dos anos, descobri que muitas pessoas têm problemas para entender a convenção de nomenclatura em quatro partes, mesmo que pareça bastante óbvio:

server_name.database_name.schema_name.object_name

Imagine o que acontecerá se eles virem algo assim:

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

ou:

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

Manter as coisas simples é importante.

Marek Grzenkowicz
fonte
15

Caso outra pessoa encontre essa pergunta ...

Lembre-se de que não é apenas uma má ideia, porque os usuários podem ficar confusos, mas também porque algumas ferramentas podem ficar confusas.

Até a própria Microsoft tem problemas com isso. Se você tentar conectar seu banco de dados a uma planilha do Excel usando o Microsoft Query (via ODBC), receberá um assistente de configuração que permite escolher o banco de dados ao qual você deseja se conectar. No entanto, escolher um banco de dados que contenha um ponto produzirá um erro informando que o servidor não foi encontrado. Parece que o assistente não verifica se os valores precisam escapar e concatena cegamente os identificadores.

É claro que existem soluções alternativas, mas você evita alguns problemas por não fazer isso desde o início.

aKzenT
fonte
7

Não use ponto em nomes de banco de dados, nomes de publicação, nomes de usuário. E eu recomendo fortemente nunca usar um ponto no nome (coluna, tabela, exibição, banco de dados, etc.).

Atualização: posso confirmar que o sinal de menos "-" causa problemas semelhantes.

Aqui está o que acontece:

O SQL Server usa scripts para uso interno, como procedimentos armazenados do sistema. Como já mencionado aqui, os comandos que você usa às vezes o forçam a colocar o nome entre colchetes e isso (seriamente a microsoft?) Nem sempre é bom para o uso de procedimentos armazenados .

Na verdade, não consigo mais limpar as informações de informações, porque o procedimento armazenado percorre todos os bancos de dados e não escapa aos nomes de banco de dados de maneira apropriada. Essa iteração é tão complexa que não consegui corrigi-la em mais de 8 SPs.

Além disso, não consigo usar o MMC ou scripts para editar conflitos de replicação . Se você tiver um (um!) Banco de dados com um ponto em seu nome, esses problemas ocorrerão no everey db, em todas as publicações.

Estas são as ocorrências que tenho. Ações SQL complexas são processadas na linguagem sql e funcionarão bem, se a base estiver correta.

Se você tentar conectar seu banco de dados a uma planilha do Excel usando o Microsoft Query (via ODBC), receberá um assistente de configuração que permite escolher o banco de dados ao qual você deseja se conectar. - aKzenT

Esses erros podem ser encontrados com mais frequência em softwares de terceiros, portanto, nunca use pontos em todos os nomes de qualquer coisa no servidor sql.

Daniel
fonte
6

Existem muitos caracteres permitidos nos nomes, mas a convenção e o senso comum limitam o uso de caracteres especiais. '_' (sublinhado) é o separador mais seguro comprovado e mantém a facilidade de legibilidade.

user48235
fonte
1

Mesmo acordo: o nome da chave estrangeira não deve conter nenhum ponto.

Descobri que se você precisar renomear esse nome, precisará de colchetes para dar certo sp_rename(porque, ao renomear uma chave estrangeira, é necessário especificar o esquema).

Exemplo:

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

Se você esquecer os colchetes, receberá um erro: 15225

Ozzie
fonte
-1

Um de nossos fornecedores optou por introduzir o nome do esquema: [System.Activities.DurableInstancing]. Ele quebrou nossa ferramenta de carregamento de dados, então agora temos mais desenvolvimento para lidar com sua estranheza. Apenas não faça isso. Use um '-'.

Marca
fonte
5
Por que usar um traço -quando você pode usar um sublinhado _e não precisar colocar o nome entre colchetes?
ErikE 25/02
3
Um sinal de menos causará outros problemas, mas semelhantes.
Daniel