Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

Os comandos SET do SQL Server

Post Views 6,072 views
Reading time 6 minutes

Leitores,
Boa tarde!

Nesse post vou falar mais sobre a instrução SET do SQL Server, que além de ser utilizada para definição de variáveis, também pode ser utilizada para alterar configurações da sessão atual. São elas:

Categoria Instrução Descrição
Data e Hora SET DATEFIRST Define o primeiro dia da semana como um número de 1 a 7, onde:
1 = Segunda-feira
2 = Terça-feira
3 = Quarta-feira
4 = Quinta-feira
5 = Sexta-feira
6 = Sábado
7 = Domingo (Padrão)
SET DATEFORMAT Define o formato padrão de datas (mdy, dmy, ymd, etc)
Bloqueio (LOCKS) SET DEADLOCK_PRIORITY Especifica a importância da sessão atual caso haja um Deadlock.
Caso duas sessões entrem em Deadlock e tenham a mesma prioridade, ambas são elegíveis a serem eliminadas.
Caso possuam prioridades diferentes, a sessão de menor prioridade é eliminada.

Parâmetros:
– LOW: Prioridade abaixo de NORMAL, HIGH ou um valor inteiro superior a -5.
– NORMAL: Prioridade abaixo de HIGH ou para um valor inteiro superior a 0. É a prioridade padrão.
– HIGH: Prioridade abaixo de uma sessão com um valor inteiro superior a 5.
– <numeric-priority>: É um intervalo de valor inteiro (-10 a 10) para fornecer 21 níveis de prioridade de deadlock ao invés de apenas 3 caso utilize as pré-definidas.

SET LOCK_TIMEOUT Especifica o número de milissegundos até o banco retornar um erro de bloqueio, onde:
– -1 (padrão): indica nenhum tempo limite (isto é, esperar indefinidamente).
– 0: significa não esperar e retornar uma mensagem assim que um bloqueio for encontrado
Diversas SET CONCAT_NULL_YIELDS_NULL Quando SET CONCAT_NULL_YIELDS_NULL for ON, a concatenação de um valor nulo com uma cadeia de caracteres gera um resultado NULL.

Por exemplo, SELECT ‘abc’ + NULL gera NULL. Quando SET CONCAT_NULL_YIELDS_NULL for OFF, a concatenação de um valor nulo com uma cadeia de caracteres gera a própria cadeia de caracteres (o valor nulo é tratado como uma cadeia de caracteres vazia). Por exemplo, SELECT ‘abc’ + NULL gera abc

SET CURSOR_CLOSE_ON_COMMIT Quando SET CURSOR_CLOSE_ON_COMMIT for ON, esta configuração fecha qualquer cursor aberto em confirmação ou reversão em conformidade com a ISO.

Quando SET CURSOR_CLOSE_ON_COMMIT for OFF, o cursor não será fechado quando uma transação estiver confirmada

SET FIPS_FLAGGER Especifica a verificação de conformidade com o padrão FIPS 127-2. Baseia-se no padrão ISO.

Parâmetros:
– ENTRY: Verificação dos padrões com relação à conformidade do nível de entrada do ISO.
– FULL: Verificação dos padrões com relação à conformidade total com o ISO.
– INTERMEDIATE: Verificação dos padrões com relação à conformidade do nível intermediário do ISO.
– OFF: Nenhum padrão é verificado.

SET IDENTITY_INSERT Permite inserir valores explícitos em uma coluna IDENTITY (Somente uma tabela em uma sessão pode ter a propriedade IDENTITY_INSERT definida como ON)

Exemplo (Parâmetros = ON ou OFF):
SET IDENTITY_INSERT dbo.Cliente ON;

SET LANGUAGE Especifica o ambiente de idioma para a sessão. O idioma da sessão determina os formatos datetime e as mensagens de sistema.

Exemplo: SET LANGUAGE ‘Brazilian’
Lista completa: SELECT * FROM syslanguages

SET OFFSETS Retorna o deslocamento (posição relativa ao início de uma instrução) das palavras-chave especificadas (Não utilize, pois será removido em versões futuras)
SET QUOTED_IDENTIFIER Quando SET QUOTED_IDENTIFIER está ON, os identificadores podem ser delimitados por aspas duplas e strings devem ser delimitadas por aspas simples.
Quando SET QUOTED_IDENTIFIER está OFF, os identificadores não podem estar entre aspas e strings podem ser delimitadas por aspas simples ou duplas.
Execuções de Query SET ARITHABORT Define se ao ocorrer overflow ou erro de divisão por zero a consulta será encerrada (ON)
SET ARITHIGNORE Controla se são retornadas mensagens de erro de overflow ou divisão por zero (OFF)
SET FMTONLY Faz com que, caso habilitado (ON), a instrução retorne apenas a informações de colunas (Metadados). Nenhuma linha de dados é retornada (Não use, será descontinuado)
SET NOCOUNT Controla se será exibida a quantidade de registros afetados pela consulta (OFF) ou se será ocultado (ON).

Obs: A função @@ROWCOUNT é atualizada mesmo quando SET NOCOUNT é ON.

SET NOEXEC Quando SET NOEXEC é ON, o banco compila as instruções TSQL, valida (PARSE), mas não as executa
SET NUMERIC_ROUNDABORT Quando SET NUMERIC_ROUNDABORT é ON, um erro é gerado depois de ocorrer uma perda de precisão em uma expressão. Quando é OFF, perdas de precisão não geram mensagens de erro e o resultado é arredondado à precisão da coluna ou variável que armazena o resultado.

A perda de precisão ocorre quando é feita uma tentativa de armazenar um valor com uma precisão fixa em uma coluna ou variável com menos precisão.

SET PARSEONLY Quando SET PARSEONLY é ON, Examina a sintaxe de cada instrução e retorna quaisquer mensagens de erro sem compilar ou executar a instrução
SET QUERY_GOVERNOR_COST_LIMIT Define um valor inteiro que especifica o maior de custo que uma query na sessão pode atingir
Essa opção sobrescreve a configuração “Query governor cost limit”
SET ROWCOUNT Faz o SQL Server parar o processamento de consulta depois que o número especificado de linhas for retornado

Exemplo para retornar apenas 10 linhas (Prefira usar o TOP)
SET ROWCOUNT 10;
GO

SELECT * FROM dbo.Clientes

SET TEXTSIZE Especifica o tamanho de dados varchar(max), nvarchar(max), varbinary(max), text, ntexte image retornados por uma instrução SELECT
Configurações ISO SET ANSI_DEFAULTS Controla um grupo de configurações do SQL Server. Quando ativada (ON), esta opção habilita as seguintes configurações ISO:
– SET ANSI_NULLS
– SET CURSOR_CLOSE_ON_COMMIT
– SET ANSI_NULL_DFLT_ON
– SET IMPLICIT_TRANSACTIONS
– SET ANSI_PADDING
– SET QUOTED_IDENTIFIER
– SET ANSI_WARNINGS
SET ANSI_NULL_DFLT_OFF Quando SET ANSI_NULL_DFLT_OFF for ON, novas colunas criadas com o uso das instruções ALTER TABLE e CREATE TABLE serão NOT NULL se não for especificado explicitamente
SET ANSI_NULL_DFLT_ON Quando SET ANSI_NULL_DFLT_OFF for ON, novas colunas criadas com o uso das instruções ALTER TABLE e CREATE TABLE aceitarão valores NULL se não for especificado explicitamente
SET ANSI_NULLS Especifica o comportamento compatível ISO dos operadores de comparação Igual a (=) e Diferente de (<>) quando usados com valores nulos.

Quando SET ANSI_NULLS é ON, uma instrução SELECT que usa WHERE column_name = NULL retorna zero linhas mesmo que haja valores nulos em column_name
Quando SET ANSI_NULLS é OFF, os operadores de comparação Igual a (=) e Diferente de (<>) não seguem o padrão ISO. Uma instrução SELECT que usa WHERE column_name = NULL retorna as linhas que têm valores nulos em column_name

SET ANSI_PADDING Quando SET ANSI_PADDING = ON, espaços à direita serão cortados em colunas VARCHAR e VARBINARY
SET ANSI_WARNINGS Especifica o comportamento padrão ISO para várias condições de erro:
– Quando definida como ON, se forem exibidos valores nulos em funções de agregação, como SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP ou COUNT, será gerada uma mensagem de aviso. Quando definido como OFF, nenhum aviso é emitido.
– Quando definida como ON, os erros de estouro aritmético e de divisão por zero fazem a instrução ser retornada e uma mensagem de erro é gerada
Estatísticas SET FORCEPLAN Quando FORCEPLAN está definido como ON, o otimizador de consulta do SQL Server processa os JOINS na mesma ordem conforme as tabelas são exibidas na cláusula FROM de uma consulta
SET SHOWPLAN_ALL Quando SET SHOWPLAN_ALL é ON, faz com que o banco não execute as queries, apenas retorne informações detalhadas e estimativas de custos sobre como as instruções são executadas
SET SHOWPLAN_TEXT Quando SET SHOWPLAN_TEXT é ON, faz com que o banco não execute as queries, apenas retorne no formato TEXTO informações detalhadas e estimativas de custos sobre como as instruções são executadas
SET SHOWPLAN_XML Quando SET SHOWPLAN_XML é ON, faz com que o banco não execute as queries, apenas retorne no formato XML informações detalhadas e estimativas de custos sobre como as instruções são executadas
SET STATISTICS IO Quando SET STATISTICS IO é ON, faz o SQL Server exibir informações referentes à quantidade de atividade em disco gerada pelas instruções
SET STATISTICS XML Quando é ON, Faz com que o SQL Server execute instruções e gere informações detalhadas sobre como as instruções foram executadas na forma de um documento XML
SET STATISTICS PROFILE Quando STATISTICS PROFILE está como ON, cada consulta executada retorna o número de linhas geradas por cada operador e número de vezes que o operador foi executado
SET STATISTICS TIME Quando está como ON, exibe o número de milissegundos necessários para analisar, compilar e executar cada instrução
Transações SET IMPLICIT_TRANSACTIONS Quando ON, SET IMPLICIT_TRANSACTIONS define a conexão em modo de transação implícita. Neste modo, uma instrução BEGIN TRANSACTION implícita iniciará duas transações aninhadas e a execução de qualquer uma das seguintes instruções inicia uma transação:
– ALTER TABLE
– FETCH
– REVOKE
– BEGIN TRANSACTION
– GRANT
– SELECT
– CREATE
– INSERT
– TRUNCATE TABLE
– DELETE
– OPEN
– UPDATE
– DROP
SET REMOTE_PROC_TRANSACTIONS Quando ON, Especifica que quando uma transação local está ativa, a execução de uma StoredProcedure remotamente inicia uma transação distribuída (Não utilizar, será descontinuado)
SET TRANSACTION ISOLATION LEVEL Controla o comportamento de bloqueio e do controle de versão de linha:

– READ UNCOMMITTED: Especifica que as instruções podem ler linhas que foram modificadas por outras transações, mas que ainda não foram confirmadas (NOLOCK).

– READ COMMITTED (Padrão): Especifica que as instruções não podem ler dados que foram modificados, mas que ainda não foram confirmados por outras transações. Isso impede leituras sujas.

– REPEATABLE READ: Especifica que as instruções não podem ler dados que foram modificados, mas que ainda não foram confirmados por outras transações e que nenhuma outra transação pode modificar dados que foram lidos pela transação atual até que a transação atual seja concluída.

– SNAPSHOT: Especifica que os dados lidos por qualquer instrução em uma transação serão a versão transacionalmente consistente que existia no início da transação. A transação pode reconhecer apenas modificações de dados que estavam confirmadas antes do início da transação. Modificações de dados efetuadas por outras transações após o início da transação atual não são visíveis para as instruções em execução na transação atual. O efeito será como se as instruções em uma transação obtivessem um instantâneo dos dados confirmados conforme existiam no início da transação.

– SERIALIZABLE: As instruções não podem ler dados que foram modificados, e que ainda não foram confirmados por outras transações. Nenhuma outra transação pode modificar dados lidos pela transação atual até que a transação atual seja concluída. Outras transações não podem inserir linhas novas com valores chave que estejam no intervalo de chaves lido por qualquer instrução da transação atual até que esta seja concluída.

SET XACT_ABORT Quando é ON, especifica que o SQL Server deve reverter (ROLLBACK) automaticamente a transação atual quando uma instrução Transact-SQL gerar um erro em tempo de execução.

E é isso aí, pessoal! Para maiores informações, consulte a página oficial da Microsoft sobre o comando SET

Até a próxima!