Compartilhar via


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.

;
(ponto e vírgula)

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
PRINT
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:

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: