Os geradores de código tendem a ser mais simples quando geram saída usando a nova notação de colchete da Microsoft ( []
) para quase tudo.
Quando o vi pela primeira vez, fiquei impressionado com a reencarnação da notação de identificador citada, um tanto banida.
Até onde eu sei, é uma extensão proprietária da Microsoft (o que significa que a Oracle não a suporta).
Olhando para o SQL Server, não há diferença se você definir uma tabela como
CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]);
ou
CREATE TABLE dbo.Table_2 (col1 int, col2 int);
É uma questão de estilo pessoal ou corporativo. Ser consistente.
Agora, se você deseja migrar seu banco de dados para Oracle, os colchetes não são uma opção.
Você pode usar os identificadores citados antigos, mas estes diferenciam maiúsculas de minúsculas, o que causa muitos problemas.
É uma boa idéia remover todos os colchetes do código gerado, evitar usar espaços em branco, outros caracteres especiais e palavras-chave reservadas para nomes e apenas codificar da maneira que a maioria dos DBMS entende?
fonte
Parênteses são necessários se os nomes de sua tabela ou coluna:
SELECT [column name] FROM table;
SELECT [wt[f]
ouSELECT [wt]]f]
^
ou!
(sim, eles podem conter esses símbolos!)KEY
,STATE
,RULE
, ...Obviamente, se você tiver controle sobre o esquema, evite usar nomes como estes. No entanto, em alguns casos, o melhor nome é reservado (como
KEY
na coluna de chave em uma tabela de valor-chave genérica), então cabe a você decidir o quanto deseja usá-lo (e, portanto, citá-lo em todos os lugares).Também uso colchetes para suprimir o destaque azul que o SSMS e o VS fornecem algumas palavras-chave como
DESCRIPTION
essas não reservadas pelo SQL Server, mas são especiais para essas ferramentas.Definitivamente use colchetes ao gerar dinamicamente SQL. A maneira mais fácil de fazer isso é chamando
QUOTENAME()
os objetos que você está referenciando dinamicamente (por exemploSELECT QUOTENAME(name) FROM sys.databases;
).sp_MSforeachdb
, por exemplo, não faz isso .fonte
Quando escrevo código que gera código, coloco colchetes em torno dos nomes dos objetos de banco de dados. Não incluo os colchetes ao escrever o código manualmente e acho que isso prejudica a legibilidade do código. Também proíbo nomes de objetos de banco de dados com espaços. O SQL Server permitirá que você use espaços nos nomes dos objetos, mas isso não significa que é uma coisa boa.
fonte
Eu provavelmente nem tentaria ter DDL portátil. Seria melhor se eu gerasse definições de tabela Oracle fora das visualizações do sistema do SQL Server, se necessário.
Também não acho que faça sentido escrever DML portátil - o PL / SQL é totalmente diferente do T-SQL. Para portabilidade, é mais fácil expor seu banco de dados por meio de uma API de procedimentos armazenados. As assinaturas desses procedimentos devem ser as mesmas nas duas plataformas, mas as implementações podem usar recursos proprietários - no geral, isso é muito mais fácil do que tentar usar apenas o SQL padrão ANSI.
Esta conclusão é baseada em vários anos de experiência no desenvolvimento de sistemas portáteis, trabalhando no Oracle e no SQL Server.
fonte