Referências de sintaxe para Transact-SQL
Introdução
Este artigo tem como objetivo mostrar que apesar da flexibilidade na construção de instruções Transact-SQL que temos através do SSMS (SQL Server Management Studio) ou da linha de comando sqlcmd, existe sim um padrão determinado para escrever à sintaxe de cada comando no SQL Server.
É uma boa prática, padronizar os objetos disponíveis em seu banco de dados na forma proposta, com intuito de facilitar o entendimento do seu script e a sua manutenção posterior, seja quem for o responsável por esta atualização.
Existe também termos utilizados exclusivamente pelo SQL Server para definir, manipular ou acessar os dados e os objetos de um banco de dados, este termos são conhecidos como Palavras Reservadas.
Convenção Utilizada
A Referência das instruções do Transact-SQL foi homologada em servidores executando uma ordem de classificação com diferenciação de maiúsculas e minúsculas, utilizando a página de código ANSI/ISO 1252.
Em casos de utilização da cadeia de caracteres Unicode, o script T-SQL inclui um prefixo constante representado pela letra N. Sem este prefixo, a cadeia de caracteres pode ser convertida para à página de código padrão do banco de dados e alguns caracteres não serão reconhecidos.
Esta convenção é utilizada inicialmente para documentação e diagramação de objetos, mas é recomendável que esta convenção seja aplicada, no que for possível, na construção do seu T-SQL.
A tabela à seguir descreve algumas das convenções que devem ser utilizadas na sintaxe:
Convenção |
Usado em |
---|---|
CAIXA ALTA |
Palavras reservadas do Transact-SQL. |
[ ] (colchetes) |
Item de sintaxe opcional. Não digite os colchetes se não for necessário. |
; |
Terminador de instrução Transact-SQL. Embora o sinal de ponto-e-vírgula não seja obrigatório na maioria das instruções nesta versão do SQL Server, ele será necessário em uma versão futura. |
<rótulo>:: = |
O nome de um bloco de sintaxe. Essa convenção é usada para agrupar e rotular seções de sintaxe extensa ou uma unidade de sintaxe que pode ser usada em mais de um local dentro de uma instrução. Cada local no qual o bloco de sintaxe pode ser usado é indicado com o rótulo entre divisas: <rótulo>. Um conjunto é uma coleção de expressões (por exemplo, <conjunto de agrupamentos>) e uma lista é uma coleção de conjuntos (por exemplo, <lista de elementos composta>). |
Nomes de Objetos
O nome de um objeto pode ser composto de até 4 partes, como segue abaixo:
nome_do_servidor.[nome_do_banco_de_dados].[nome_do_schema].nome_do_objeto
Nem sempre é necessário especificar toda à referência de um nome de objeto para que este seja encontrado, mas caso o objeto não seja localizado o SQL Server retornará um erro indicando que o objeto não foi encontrado.
Para evitar erros de sintaxe, principalmente quando um banco de dados possui mais de um schema, é recomendado que seja indicado no nome do objeto ao menos o schema à qual pertence, como exibido abaixo:
nome_do_schema.nome_do_objeto
Palavras Reservadas
As Palavras Reservadas são utilizadas para processamento das instruções do SQL Server. Considere evitar o uso destas Palavras Reservadas em qualquer objeto ou como seus identificadores para otimizar à performance de sua instrução T-SQL. A equipe de desenvolvimento do SQL Server mantém sempre estas listas atualizadas.
Estas palavras normalmente são utilizadas como funções ou procedimentos internos de sistema e estendidos à ele.
Existem três listas determinadas com Palavras Reservadas para o SQL Server, duas destas listas já estão em uso e uma outra lista é disponibilizada para preparar seus objetos e respectivas instruções T-SQL para futuras migrações de versão do SQL Server. Estas listas de Palavras Reservadas são: T-SQL, ISO/ODBC e Futuras Palavras em T-SQL
Palavras Reservadas em T-SQL
As Palavras Reservadas fazem parte da gramática no Transact-SQL para analisar e compreender às instruções e os seus batches.
O SQL Server permite à utilização destas palavras como identificadores e nomes de objeto em scripts Transact-SQL, mas é necessário efetuar o tratamento adequado para evitar erros ou lentidão no processamento da instrução. Para saber mais sobre o que pode ocorrer e como corrigir estes objetos veja a seção Erros Conhecidos.
Futuramente, outras palavras podem ser adicionadas à esta lista. Para evitar problemas de processamento ou performance de sua aplicação é recomendado estar atento para evitar estas novas palavras também. Veja estas palavras na lista Futuras Palavras Reservadas em T-SQL.
A tabela abaixo mostra às Palavras Reservadas pelo Transact-SQL até a versão atual do SQL Server (em ordem alfabética):
ADD |
ALL |
ALTER |
AND |
ANY |
AS |
ASC |
AUTHORIZATION |
BACKUP |
BEGIN |
BETWEEN |
BREAK |
BROWSE |
BULK |
BY |
CASCADE |
CASE |
CHECK |
CHECKPOINT |
CLOSE |
CLUSTERED |
COALESCE |
COLLATE |
COLUMN |
COMMIT |
COMPUTE |
CONSTRAINT |
CONTAINS |
CONTAINSTABLE |
CONTINUE |
CONVERT |
CREATE |
CROSS |
CURRENT |
CURRENT_DATE |
CURRENT_TIME |
CURRENT_TIMESTAMP |
CURRENT_USER |
CURSOR |
DATABASE |
DBCC |
DEALLOCATE |
DECLARE |
DEFAULT |
DELETE |
DENY |
DESC |
DISK |
DISTINCT |
DISTRIBUTED |
DOUBLE |
DROP |
DUMP |
ELSE |
END |
ERRLVL |
ESCAPE |
EXCEPT |
EXEC |
EXECUTE |
EXISTS |
EXIT |
EXTERNAL |
FETCH |
FILE |
FILLFACTOR |
FOR |
FOREIGN |
FREETEXT |
FREETEXTTABLE |
FROM |
FULL |
FUNÇÃO |
GOTO |
GRANT |
GROUP |
HAVING |
HOLDLOCK |
IDENTITY |
IDENTITY_INSERT |
IDENTITYCOL |
IF |
IN |
INDEX |
INNER |
INSERT |
INTERSECT |
INTO |
IS |
JOIN |
KEY |
KILL |
LEFT |
LIKE |
LINENO |
LOAD |
MERGE |
NATIONAL |
NOCHECK |
NONCLUSTERED |
NOT |
NULL |
NULLIF |
OF |
OFF |
OFFSETS |
ON |
OPEN |
OPENDATASOURCE |
OPENQUERY |
OPENROWSET |
OPENXML |
OPTION |
OR |
ORDER |
OUTER |
OVER |
PERCENT |
PIVOT |
PLAN |
PRECISION |
PRIMARY |
PROC |
PROCEDURE |
PUBLIC |
RAISERROR |
READ |
READTEXT |
RECONFIGURE |
REFERENCES |
REPLICATION |
RESTORE |
RESTRICT |
RETURN |
REVERT |
REVOKE |
RIGHT |
ROLLBACK |
ROWCOUNT |
ROWGUIDCOL |
RULE |
SAVE |
SCHEMA |
SECURITYAUDIT |
SELECT |
SEMANTICKEYPHRASETABLE |
SEMANTICSIMILARITYDETAILSTABLE |
SEMANTICSIMILARITYTABLE |
SESSION_USER |
SET |
SETUSER |
SHUTDOWN |
SOME |
STATISTICS |
SYSTEM_USER |
TABLE |
TABLESAMPLE |
TEXTSIZE |
THEN |
TO |
TOP |
TRAN |
TRANSACTION |
TRIGGER |
TRUNCATE |
TRY_CONVERT |
TSEQUAL |
UNION |
UNIQUE |
UNPIVOT |
UPDATE |
UPDATETEXT |
USE |
USER |
VALUES |
VARYING |
VIEW |
WAITFOR |
WHEN |
WHERE |
WHILE |
WITH |
WITHIN GROUP |
WRITETEXT |
Palavras Reservadas ISO/ODBC
A lista de Palavras Reservadas do padrão ISO é a mesma da ODBC. Em alguns casos, esta lista é mais restritiva do que à lista indicada nas Palavras Reservadas em T-SQL.
A tabela abaixo mostra às Palavras Reservadas na listagem ISO (em ordem alfabética):
ABSOLUTE |
ACTION |
ADA |
ADD |
ALL |
ALLOCATE |
ALTER |
AND |
ANY |
ARE |
AS |
ASC |
ASSERTION |
AT |
AUTHORIZATION |
AVG |
BEGIN |
BETWEEN |
BIT |
BIT_LENGTH |
BOTH |
BY |
CASCADE |
CASCADED |
CASE |
CAST |
CATALOG |
CHAR |
CHAR_LENGTH |
CHARACTER |
CHARACTER_LENGTH |
CHECK |
CLOSE |
COALESCE |
COLLATE |
COLLATION |
COLUMN |
COMMIT |
CONNECT |
CONNECTION |
CONSTRAINT |
CONSTRAINTS |
CONTINUE |
CONVERT |
CORRESPONDING |
COUNT |
CREATE |
CROSS |
CURRENT |
CURRENT_DATE |
CURRENT_TIME |
CURRENT_TIMESTAMP |
CURRENT_USER |
CURSOR |
DATE |
DAY |
DEALLOCATE |
DEC |
DECIMAL |
DECLARE |
DEFAULT |
DEFERRABLE |
DEFERRED |
DELETE |
DESC |
DESCRIBE |
DESCRIPTOR |
DIAGNOSTICS |
DISCONNECT |
DISTINCT |
DOMAIN |
DOUBLE |
DROP |
ELSE |
END |
END-EXEC |
ESCAPE |
EXCEPT |
EXCEPTION |
EXEC |
EXECUTE |
EXISTS |
EXTERNAL |
EXTRACT |
FALSE |
FETCH |
FIRST |
FLOAT |
FOR |
FOREIGN |
FORTRAN |
FOUND |
FROM |
FULL |
GET |
GLOBAL |
GO |
GOTO |
GRANT |
GROUP |
HAVING |
HOUR |
IDENTITY |
IMMEDIATE |
IN |
INCLUDE |
INDEX |
INDICATOR |
INITIALLY |
INNER |
INPUT |
INSENSITIVE |
INSERT |
INT |
INTEGER |
INTERSECT |
INTERVAL |
INTO |
IS |
ISOLATION |
JOIN |
KEY |
LANGUAGE |
LAST |
LEADING |
LEFT |
LEVEL |
LIKE |
LOCAL |
LOWER |
MATCH |
MAX |
MIN |
MINUTE |
MODULE |
MONTH |
NAMES |
NATIONAL |
NATURAL |
NCHAR |
NEXT |
NO |
NONE |
NOT |
NULL |
NULLIF |
NUMERIC |
OCTET_LENGTH |
OF |
ON |
ONLY |
OPEN |
OPTION |
OR |
ORDER |
OUTER |
OUTPUT |
OVERLAPS |
PAD |
PARTIAL |
PASCAL |
POSITION |
PRECISION |
PREPARE |
PRESERVE |
PRIMARY |
PRIOR |
PRIVILEGES |
PROCEDURE |
PUBLIC |
READ |
REAL |
REFERENCES |
RELATIVE |
RESTRICT |
REVOKE |
RIGHT |
ROLLBACK |
ROWS |
SCHEMA |
SCROLL |
SECOND |
SECTION |
SELECT |
SESSION |
SESSION_USER |
SET |
SIZE |
SMALLINT |
SOME |
SPACE |
SQL |
SQLCA |
SQLCODE |
SQLERROR |
SQLSTATE |
SQLWARNING |
SUBSTRING |
SUM |
SYSTEM_USER |
TABLE |
TEMPORARY |
THEN |
TIME |
TIMESTAMP |
TIMEZONE_HOUR |
TIMEZONE_MINUTE |
TO |
TRAILING |
TRANSACTION |
TRANSLATE |
TRANSLATION |
TRIM |
TRUE |
UNION |
UNIQUE |
UNKNOWN |
UPDATE |
UPPER |
USAGE |
USER |
USING |
VALUE |
VALUES |
VARCHAR |
VARYING |
VIEW |
WHEN |
WHENEVER |
WHERE |
WITH |
WORK |
WRITE |
YEAR |
ZONE |
Futuras Palavras Reservadas em T-SQL
A lista de Futuras Palavras Reservadas em T-SQL buscam preparar todos que utilizam o SQL Server para adaptar seus objetos e instruções T-SQL para evitar o uso de alguma destas palavras, mantendo assim seu conteúdo de acordo com às Boas Práticas de utilização do SQL Server.
A tabela abaixo mostra às Palavras Reservadas que no Futuro podem se tornar Reservadas para uso do T-SQL (em ordem alfabética):
ABSOLUTE |
ACTION |
ADMIN |
AFTER |
AGGREGATE |
ALIAS |
ALLOCATE |
ARE |
ARRAY |
ASENSITIVE |
ASSERTION |
ASYMMETRIC |
AT |
ATOMIC |
BEFORE |
BINARY |
BIT |
BLOB |
BOOLEAN |
BOTH |
BREADTH |
CALL |
CALLED |
CARDINALITY |
CASCADED |
CAST |
CATALOG |
CHAR |
CHARACTER |
CLASS |
CLOB |
COLLATION |
COLLECT |
COMPLETION |
CONDITION |
CONNECT |
CONNECTION |
CONSTRAINTS |
CONSTRUCTOR |
CORR |
CORRESPONDING |
COVAR_POP |
COVAR_SAMP |
CUBE |
CUME_DIST |
CURRENT_CATALOG |
CURRENT_DEFAULT_TRANSFORM_GROUP |
CURRENT_PATH |
CURRENT_ROLE |
CURRENT_SCHEMA |
CURRENT_TRANSFORM_GROUP_FOR_TYPE |
CYCLE |
DATA |
DATE |
DAY |
DEC |
DECIMAL |
DEFERRABLE |
DEFERRED |
DEPTH |
DEREF |
DESCRIBE |
DESCRIPTOR |
DESTROY |
DESTRUCTOR |
DETERMINISTIC |
DIAGNOSTICS |
DICTIONARY |
DISCONNECT |
DOMAIN |
DYNAMIC |
EACH |
ELEMENT |
END-EXEC |
EQUALS |
EVERY |
EXCEPTION |
FALSE |
FILTER |
FIRST |
FLOAT |
FOUND |
FREE |
FULLTEXTTABLE |
FUSION |
GENERAL |
GET |
GLOBAL |
GO |
GROUPING |
HOLD |
HOST |
HOUR |
IGNORE |
IMMEDIATE |
INDICATOR |
INITIALIZE |
INITIALLY |
INOUT |
INPUT |
INT |
INTEGER |
INTERSECTION |
INTERVAL |
ISOLATION |
ITERATE |
LANGUAGE |
LARGE |
LAST |
LATERAL |
LEADING |
LESS |
LEVEL |
LIKE_REGEX |
LIMIT |
LN |
LOCAL |
LOCALTIME |
LOCALTIMESTAMP |
LOCATOR |
MAP |
MATCH |
MEMBER |
METHOD |
MINUTE |
MOD |
MODIFIES |
MODIFY |
MODULE |
MONTH |
MULTISET |
NAMES |
NATURAL |
NCHAR |
NCLOB |
NEW |
NEXT |
NO |
NONE |
NORMALIZE |
NUMERIC |
OBJETO |
OCCURRENCES_REGEX |
OLD |
ONLY |
OPERATION |
ORDINALITY |
OUT |
OUTPUT |
OVERLAY |
PAD |
PARAMETER |
PARAMETERS |
PARTIAL |
PARTITION |
PATH |
PERCENT_RANK |
PERCENTILE_CONT |
PERCENTILE_DISC |
POSITION_REGEX |
POSTFIX |
PREFIX |
PREORDER |
PREPARE |
PRESERVE |
PRIOR |
PRIVILEGES |
RANGE |
READS |
REAL |
RECURSIVE |
REF |
REFERENCING |
REGR_AVGX |
REGR_AVGY |
REGR_COUNT |
REGR_INTERCEPT |
REGR_R2 |
REGR_SLOPE |
REGR_SXX |
REGR_SXY |
REGR_SYY |
RELATIVE |
RELEASE |
RESULT |
RETURNS |
ROLE |
ROLLUP |
ROUTINE |
ROW |
ROWS |
SAVEPOINT |
SCOPE |
SCROLL |
SEARCH |
SECOND |
SECTION |
SENSITIVE |
SEQUENCE |
SESSION |
SETS |
SIMILAR |
SIZE |
SMALLINT |
SPACE |
SPECIFIC |
SPECIFICTYPE |
SQL |
SQLEXCEPTION |
SQLSTATE |
SQLWARNING |
START |
STATE |
STATEMENT |
STATIC |
STDDEV_POP |
STDDEV_SAMP |
STRUCTURE |
SUBMULTISET |
SUBSTRING_REGEX |
SYMMETRIC |
SYSTEM |
TEMPORARY |
TERMINATE |
THAN |
TIME |
TIMESTAMP |
TIMEZONE_HOUR |
TIMEZONE_MINUTE |
TRAILING |
TRANSLATE_REGEX |
TRANSLATION |
TREAT |
TRUE |
UESCAPE |
Erros Conhecidos
Como indicado na seção Palavras Reservadas T-SQL, é uma Boa Prática não utilizar palavras reservadas do SQL Server em objetos, como por exemplo os nomes de campos em tabelas.
Neste caso, quando não é possível alterar à estrutura da tabela, mudando o nome deste campo por um que não seja Palavra Reservada, é recomendado que o nome do campo esteja entre colchetes, como no exemplo abaixo:
nome_do_schema.nome_da_tabela.[nome_do_campo]
Informações Adicionais
Este artigo está em constante evolução fique à vontade para incluir informações adicionais sobre novas convenções ou problema em relação ao mau uso de convenções ou palavras reservadas. Se possível, destaque à solução utilizada.
Veja Também
Leia alguns tópicos relacionados ao assunto:
- Convenções de sintaxe Transact-SQL
- Palavras-chave Reservadas (Transact-SQL)
- Expressões (Transact-SQL)
- Funções Internas (Transact-SQL)
Outro lugar importante para encontrar uma enorme quantidade de artigos relacionados à Transact-SQL é o próprio TechNet Wiki.
O melhor ponto de entrada pode ser encontrado em:
Outros Idiomas
Você também pode encontrar este artigo nos seguintes idiomas: