Variáveis ​​SQL: Declarar, definir e selecionar variáveis ​​no SQL Server

⚡ Resumo Inteligente

As variáveis ​​do SQL Server são objetos nomeados que atuam como marcadores para um único valor de dados na memória. Uma variável deve ser declarada com a instrução DECLARE antes que um valor possa ser atribuído a ela e reutilizada.

  • 📦 Definição: Uma variável do SQL Server armazena um valor e funciona como um marcador de posição para um endereço de memória.
  • ???? Local e Global: O SQL Server suporta variáveis ​​locais com o prefixo @ que os usuários declaram, e variáveis ​​globais mantidas pelo sistema com o prefixo @@.
  • 📝 DECLARAR: A instrução DECLARE cria uma variável e, por padrão, a inicializa com o valor NULL.
  • 🔀 Três métodos de atribuição: Um valor pode ser atribuído durante o comando DECLARE, com SET ou com SELECT.
  • 🔎 Subconsultas escalares: Tanto o SET quanto o SELECT podem ler um único valor de uma consulta e armazená-lo em uma variável.
  • 🧠 SET versus SELECT: SET atribui um valor a uma variável e segue o padrão ANSI, enquanto SELECT pode atribuir valores a várias variáveis ​​simultaneamente.

Variáveis ​​do SQL Server: DECLARE, SET e SELECT

O que é uma variável no SQL Server?

In MS SQL ServerVariáveis ​​são objetos que funcionam como marcadores para um endereço de memória. Uma variável armazena um único valor de dados que você pode ler e reutilizar em um lote ou procedimento.

Tipos de variáveis ​​em SQL: local, global

O MS SQL Server possui dois tipos de variáveis:

  • Variável local
  • Variável global

No entanto, um usuário só pode criar uma variável local. A figura abaixo explica os dois tipos de variáveis ​​disponíveis no MS SQL Server.

Diagrama dos dois tipos de variáveis ​​no SQL Server: variáveis ​​locais e variáveis ​​globais.

Variável local

  • Um usuário declara a variável local.
  • Por padrão, o nome de uma variável local começa com @.
  • Cada variável local tem escopo limitado ao lote ou procedimento atual dentro de uma determinada sessão.

Variável global

  • O sistema mantém a variável global; um usuário não pode declarar uma.
  • O nome de uma variável global começa com @@.
  • Ele armazena informações relacionadas à sessão.

Como DECLARE uma variável em SQL

Antes de usar qualquer variável em um lote ou procedimento em SQLVocê precisa declará-la. O comando DECLARE cria uma variável que funciona como um marcador para um endereço de memória. Somente após a declaração, a variável poderá ser usada na parte subsequente do lote ou procedimento.

Sintaxe TSQL:

DECLARE  { @LOCAL_VARIABLE[AS] data_type  [ = value ] }

Regras:

  • A inicialização é opcional durante a declaração.
  • Por padrão, DECLARE inicializa a variável com o valor NULL.
  • Usar a palavra-chave 'AS' é opcional.
  • Para declarar mais de uma variável local, adicione uma vírgula após a primeira definição e, em seguida, forneça o nome da próxima variável. tipo de dados.

Exemplos de declaração de uma variável

Consulta: Com 'AS'

DECLARE @COURSE_ID AS INT;

Consulta: Sem 'AS'

DECLARE @COURSE_NAME VARCHAR (10);

Consulta: DECLARE duas variáveis

DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);

Atribuindo um valor à variável SQL

Você pode atribuir um valor a uma variável das três maneiras a seguir:

  • Durante a declaração de variáveis ​​usando a palavra-chave DECLARE.
  • Usando o comando SET.
  • Usando SELECT.

Vamos analisar detalhadamente as três maneiras.

Durante a declaração de variável usando a palavra-chave DECLARE

Sintaxe T-SQL:

DECLARE { @Local_Variable [AS] Datatype [ = value ] }

Aqui, após o tipo de dados, você pode usar '=' seguido do valor a ser atribuído.

Inquérito:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Executar a consulta imprime o valor atribuído durante a declaração, conforme mostrado abaixo.

Saída de uma variável atribuída durante o DECLARE, imprimindo o valor 5.

Usando a variável SET em SQL

Às vezes, você deseja manter a declaração e a inicialização separadas. O método `SET` atribui um valor à variável após ela ter sido declarada. Abaixo estão as diferentes maneiras de atribuir valores usando `SET`.

Exemplo: Atribuindo um valor a uma variável usando SET

Sintaxe:

DECLARE @Local_Variable <Data_Type>
SET @Local_Variable =  <Value>

Inquérito:

DECLARE @COURSE_ID AS INT
SET @COURSE_ID = 5
PRINT @COURSE_ID

A execução do script retorna o valor atribuído com SET, mostrado abaixo.

Saída da atribuição de um valor a uma variável usando SET, imprimindo 5

Exemplo: Atribua um valor a várias variáveis ​​usando SET.

Sintaxe:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>,
SET @Local_Variable_1 = <Value_1>
SET @Local_Variable_2 = <Value_2>

Regra: Uma palavra-chave SET pode atribuir um valor a apenas uma variável.

Inquérito:

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SET @COURSE_ID = 5
SET @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

As duas instruções PRINT retornam ambos os valores atribuídos, conforme mostrado abaixo.

Saída da atribuição de duas variáveis ​​com SET, imprimindo 5 e UNIX

Exemplo: Atribuindo um valor a uma variável com uma subconsulta escalar usando SET

Sintaxe:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)

Regras:

  • Inclua a consulta entre parênteses.
  • A consulta deve ser uma consulta escalar, ou seja, deve retornar apenas uma linha e uma coluna. Caso contrário, a consulta gerará um erro.
  • Se a consulta retornar zero linhas, a variável será definida como VAZIA, ou seja, NULA.

Suponha que temos o mesa chamado 'Guru99' com duas colunas, conforme mostrado abaixo. Esta tabela é usada nos exemplos a seguir.

GuruTabela 99 com as colunas Tutorial_ID e Tutorial_name usadas nos exemplos

Exemplo 1: Quando a subconsulta retorna uma linha como resultado

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

Como a subconsulta retorna uma linha correspondente, a variável recebe esse valor, conforme mostrado abaixo.

Resultado de uma subconsulta escalar atribuída com SET, imprimindo o nome do tutorial correspondente.

Exemplo 2: Quando a subconsulta retorna zero linhas como resultado

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Como a subconsulta não retorna nenhuma linha, o valor da variável é VAZIO, ou seja, NULO, portanto nada é impresso, como mostrado abaixo.

Resultado de uma subconsulta escalar SET que não retorna nenhuma linha, deixando a variável NULL.

Usando a variável SELECT em SQL

Assim como com o comando SET, você também pode usar o comando SELECT para atribuir valores a variáveis ​​após declará-las com o comando DECLARE. Abaixo estão diferentes maneiras de atribuir um valor usando o comando SELECT.

Exemplo: Atribuindo um valor a uma variável usando SELECT

Sintaxe:

DECLARE @LOCAL_VARIABLE <Data_Type>
SELECT @LOCAL_VARIABLE = <Value>

Inquérito:

DECLARE @COURSE_ID INT
SELECT @COURSE_ID = 5
PRINT @COURSE_ID

A atribuição SELECT imprime o valor, conforme mostrado abaixo.

Resultado da atribuição de um valor a uma variável usando SELECT, imprimindo 5

Exemplo: Atribuindo um valor a múltiplas variáveis ​​usando SELECT

Sintaxe:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>,  @Local_Variable _2 = <Value_2>

Regra: Ao contrário do comando SET, o comando SELECT pode atribuir um valor a várias variáveis ​​separadas por vírgulas.

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Ambas as variáveis ​​são atribuídas em uma única instrução SELECT, conforme mostrado abaixo.

Saída da atribuição de duas variáveis ​​com um único SELECT, imprimindo 5 e UNIX.

Exemplo: Atribuindo um valor a uma variável com uma subconsulta usando SELECT

Sintaxe:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)

Regras:

  • Inclua a consulta entre parênteses.
  • A consulta deve ser uma consulta escalar que retorne uma linha e uma coluna. Caso contrário, a consulta gerará um erro.
  • Se a consulta retornar zero linhas, então a variável estará VAZIA, ou seja, NULA.

Reconsidere nosso 'GuruMesa de 99 pés.

Exemplo 1: Quando a subconsulta retorna uma linha como resultado

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1)
PRINT @COURSE_NAME

A subconsulta retorna uma linha, portanto a variável armazena esse valor, conforme mostrado abaixo.

Resultado de uma subconsulta escalar atribuída com SELECT, imprimindo o nome do tutorial correspondente.

Exemplo 2: Quando a subconsulta retorna zero linhas como resultado

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Sem nenhuma linha correspondente, a variável permanece VAZIA, ou seja, NULA, como mostrado abaixo.

Resultado de uma subconsulta escalar SELECT que não retorna nenhuma linha, deixando a variável NULL.

Exemplo 3: Atribuir um valor a uma variável com uma instrução SELECT regular

Sintaxe:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>

Regras:

  • Diferentemente do comando SET, se a consulta retornar várias linhas, o valor da variável será definido como o valor da última linha.
  • Se a consulta retornar zero linhas, a variável será definida como VAZIA, ou seja, NULA.

Consulta 1: A consulta retorna uma linha.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3
PRINT @COURSE_NAME

A única linha correspondente define o valor da variável, conforme mostrado abaixo.

Resultado de uma atribuição SELECT regular que retorna uma linha.

Consulta 2: A consulta retorna várias linhas.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

Quando várias linhas correspondem, a variável mantém o valor da última linha, conforme mostrado abaixo.

Saída de uma atribuição SELECT regular retornando várias linhas, mantenhaping o valor da última linha

Consulta 3: A consulta retorna zero linhas.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

Quando nenhuma linha corresponde, a variável fica VAZIA, ou seja, NULA, como mostrado abaixo.

O resultado de uma consulta SELECT regular não retorna nenhuma linha, deixando a variável NULL.

Outros exemplos de variáveis ​​SQL

Uma variável declarada também pode ser usada dentro de uma consulta, por exemplo, em uma cláusula WHERE para filtrar linhas.

Inquérito:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

A variável filtra a consulta e retorna a linha correspondente, conforme mostrado abaixo.

Resultado da utilização de uma variável em uma cláusula WHERE para filtrar o Gurumesa 99

Fatos interessantes sobre variáveis ​​​​do SQL Server!

  • Uma variável local pode ser exibida usando o comando PRINT, assim como o comando SELECT.
  • O tipo de dados tabela não permite o uso de 'AS' durante a declaração.
  • SET está em conformidade com os padrões ANSI, enquanto SELECT não.
  • Também é permitido criar uma variável local chamada @. Por exemplo, ela pode ser declarada como:
'DECLARE @@ as VARCHAR (10)'

Perguntas Frequentes

Após a execução de um comando DECLARE sem atribuição, uma variável do SQL Server fica com o valor NULL. A variável existe, mas não possui valor até que você atribua um usando DECLARE com =, SET ou SELECT. Referenciá-la antes da atribuição simplesmente retorna NULL.

Quando a subconsulta não retorna nenhuma linha, o comando SET atribui o valor NULL e sobrescreve qualquer valor atual. Já o comando SELECT deixa a variável inalterada.ping qualquer que fosse o valor que já possuía. Essa diferença é relevante quando a variável começou com um valor diferente de NULL.

Uma variável de tabela, declarada como DECLARE @t TABLE(…), armazena um pequeno conjunto de resultados com escopo para um lote. Ao contrário de uma tabela temporária (#temp), ela existe apenas dentro do seu lote, não pode ser alterada após a criação e geralmente é adequada para conjuntos de dados pequenos.

Uma variável local é limitada ao lote, procedimento armazenado ou gatilho onde é declarada, dentro de uma mesma sessão. A palavra-chave GO encerra um lote, portanto, uma variável declarada antes de GO não pode ser referenciada posteriormente.

Uma variável pode usar praticamente qualquer servidor SQL Server. tipo de dados, incluindo int, decimal, varchar, nvarchar, date, datetime, bit e table. Associe a variável à coluna que ela representa para evitar erros de conversão implícita.

Reatribua a variável a si mesma com SET, por exemplo, SET @counter = @counter + 1. SELECT também funciona: SELECT @total = @total + price. Esse padrão permite criar loops e calcular totais acumulados em scripts e procedimentos armazenados.

Sim. Travas deslizantes portáteis Copiloto do GitHub É possível gerar instruções DECLARE, SET e SELECT a partir de comentários em linguagem natural e sugerir tipos de dados adequados. Sempre revise os nomes, tipos e lógica de atribuição gerados em relação ao seu esquema antes de executá-los em produção.

Assistentes de IA e aprendizado de máquina trace como as variáveis ​​recebem e transmitem valores, sinaliza variáveis ​​não inicializadas ou com tipos incorretos e sugere reescritas baseadas em conjuntos que substituem loops lentos orientados a variáveis. O desenvolvedor ainda confirma cada alteração em relação aos dados e à carga de trabalho reais.

Resuma esta postagem com: