<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para SQL com SQL Server - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/sql-com-sql-server/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/sql-com-sql-server/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Fri, 27 Sep 2024 11:26:10 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Funções de Manipulação de Strings no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 27 Sep 2024 11:22:05 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20294</guid>

					<description><![CDATA[<p>Manipulação de Strings no SQL Server A Manipulação de Strings (cadeias de caracteres) é uma tarefa trivial em bancos de dados e programação em geral. Tarefas como contar caracteres de uma string, converter letras de maiúsculas para minúsculas e vice-versa, obter partes de uma palavra ou frase, limpar caracteres indesejados e diversas outras são realizadas de forma corriqueira para tratar os dados que são armazenados e consultados em bancos de dados. Os SGBDs possuem, normalmente, diversas funções internas que permitem realizar essas tarefas, e o Microsoft SQL Server possui um bom conjunto de funções de manipulação de strings disponível. Neste artigo, veremos algumas das funções para manipular caracteres mais comuns presentes no SQL Server, com suas sintaxes, aplicações e exemplos práticos de uso. Funções de Manipulação de Strings no SQL Server As funções que serão vistas nesse artigo são as seguintes: Função LEN Função LOWER Função UPPER Função LTRIM Função RTRIM Função TRIM Função LEFT Função RIGHT Função REPLACE Função SUBSTRING Função CONCAT Função LEN A função LEN, do inglês &#8220;length&#8221; (&#8220;comprimento&#8221;), é uma das funções de manipulação de strings no SQL Server mais utilizadas, sendo empregada para retornar o número de caracteres de uma string, ou seja, seu comprimento. [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/">Funções de Manipulação de Strings no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Manipulação de Strings no SQL Server</h1>
<p>A Manipulação de Strings (cadeias de caracteres) é uma tarefa trivial em <a href="https://www.bosontreinamentos.com.br/category/bancos-de-dados/">bancos de dados</a> e programação em geral. Tarefas como contar caracteres de uma string, converter letras de maiúsculas para minúsculas e vice-versa, obter partes de uma palavra ou frase, limpar caracteres indesejados e diversas outras são realizadas de forma corriqueira para tratar os dados que são armazenados e consultados em bancos de dados.</p>
<p>Os SGBDs possuem, normalmente, diversas funções internas que permitem realizar essas tarefas, e o Microsoft SQL Server possui um bom conjunto de funções de manipulação de strings disponível.</p>
<p>Neste artigo, veremos algumas das funções para manipular caracteres mais comuns presentes no SQL Server, com suas sintaxes, aplicações e exemplos práticos de uso.</p>
<h2>Funções de Manipulação de Strings no SQL Server</h2>
<p>As funções que serão vistas nesse artigo são as seguintes:</p>
<ul>
<li><a href="#len">Função LEN</a></li>
<li><a href="#lower-right">Função LOWER</a></li>
<li><a href="#lower-right">Função UPPER</a></li>
<li><a href="#trim-rtrim-ltrim">Função LTRIM</a></li>
<li><a href="#trim-rtrim-ltrim">Função RTRIM</a></li>
<li><a href="#trim-rtrim-ltrim">Função TRIM</a></li>
<li><a href="#left-right">Função LEFT</a></li>
<li><a href="#left-right">Função RIGHT</a></li>
<li><a href="#replace">Função REPLACE</a></li>
<li><a href="#substring">Função SUBSTRING</a></li>
<li><a href="#concat">Função CONCAT</a></li>
</ul>
<h2 id="len">Função LEN</h2>
<div>A função LEN, do inglês &#8220;length&#8221; (&#8220;comprimento&#8221;), é uma das funções de manipulação de strings no SQL Server mais utilizadas, sendo empregada para retornar o número de caracteres de uma string, ou seja, seu comprimento. Geralmente a usamos em consultas SQL para validar e manipular dados textuais, como verificar o número de caracteres em uma senha ou em um código.</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;"><strong>LEN(<em>expressão</em>)</strong></span></pre>
<div>Onde <em>expressão</em> é a string ou coluna de texto cujo comprimento se deseja calcular.</div>
<div> </div>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Contar o número de caracteres nos títulos de livros</strong></div>
<div> </div>
<div>Este exemplo consulta a tabela Livro e retorna os nomes dos livros juntamente com a contagem de caracteres de cada título.</div>
<pre><strong>SELECT NomeLivro, LEN(NomeLivro) 'Tamanho do Título'</strong>
<strong>FROM Livro;</strong></pre>
<div><strong>Exemplo 2: Validar o comprimento do ISBN13</strong></div>
<div> </div>
<div>O ISBN13 deve conter exatamente 13 caracteres. Podemos usar a função LEN para verificar se algum registro na tabela Livro possui um ISBN com um número incorreto de caracteres:</div>
<pre>SELECT NomeLivro, ISBN13, LEN(ISBN13) AS 'Tamanho do ISBN'
FROM Livro
WHERE LEN(ISBN13) &lt;&gt; 13;</pre>
<div>Essa consulta retornará todos os livros cujo campo ISBN13 não contém exatamente 13 caracteres, indicando assim possíveis erros de inserção.</div>
<div> </div>
<div>
<div><strong>Exemplo 3:  Qual livro tem o título mais curto?</strong></div>
<pre>SELECT Nome_Livro, LEN(Nome_Livro)  'Tamanho do Título'
FROM tbl_Livro
WHERE LEN(Nome_Livro) = (
    SELECT MIN(LEN(Nome_Livro))
    FROM tbl_Livro
);</pre>
</div>
<div>Serão retornados os nomes dos livros que possuam o título mais curto. Para isso, combinamos a função LEN com a <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/19-t-sql-funcoes-agregadas-sum-count-max-min-avg-sql-server/">função de agregação</a> MIN em uma subconsulta.</div>
<div> </div>
<div><strong>Exemplo 4: Ordenar livros pelo comprimento do título</strong></div>
<div> </div>
<div>Também podemos ordenar os resultados de uma consulta com base no comprimento de uma string, como no exemplo a seguir, que lista os livros com os títulos mais curtos primeiro.</div>
<pre>SELECT NomeLivro
FROM Livro
ORDER BY LEN(NomeLivro) ASC;</pre>
<div><strong>Exemplo 5:  Retornar as editoras cujos nomes tenham um tamanho fixo</strong></div>
<div> </div>
<div>Se quisermos localizar editoras cujo nome contém exatamente 10 caracteres, podemos usar a seguinte consulta:</div>
<pre>SELECT NomeEditora, LEN(NomeEditora) AS Tamanho_Nome
FROM Editora
WHERE LEN(NomeEditora) = 10;</pre>
<div>Esse tipo de análise pode ser útil para verificar padrões de nomenclatura ou para fins de organização.</div>
<div> </div>
<div><strong>Exemplo 6: Exibir autores com nomes longos</strong></div>
<div> </div>
<div>Podemos usar a função LEN para identificar autores que possuem nomes ou sobrenomes extensos.</div>
<pre>SELECT NomeAutor, SobrenomeAutor, LEN(NomeAutor) + LEN(SobrenomeAutor) AS 'Tamanho do Nome Completo'
FROM Autor
WHERE (LEN(NomeAutor) + LEN(SobrenomeAutor)) &gt; 20;</pre>
<div>Essa consulta retornará os autores cujo nome completo (nome + sobrenome) contém mais de 20 caracteres.</div>
<div> </div>
<h2 id="lower-right">Funções LOWER e UPPER</h2>
<div>As funções LOWER e UPPER permitem converter os caracteres de uma string para letras minúsculas e maiúsculas, respectivamente.</div>
<div> </div>
<div>Sintaxes</div>
<pre><span style="color: #800080;">LOWER(<em>expressão</em>)
UPPER(<em>expressão</em>)</span></pre>
<div>Onde <em>expressão</em> é o texto ou coluna de texto que se deseja transformar em minúsculas ou maiúsculas.</div>
<div> </div>
<div><strong>Exemplo 1: Converter nomes de livros para minúsculas</strong></div>
<div> </div>
<div>Este exemplo consulta a tabela Livro e retorna os títulos dos livros em letras minúsculas.</div>
<pre>SELECT NomeLivro, LOWER(NomeLivro) AS 'Nome Minúsculo'
FROM Livro;</pre>
<div>O resultado exibirá o nome original do livro ao lado de sua versão em minúsculas, útil quando se deseja padronizar a exibição dos títulos.</div>
<div> </div>
<div><strong>Exemplo 2: Comparar títulos de livros sem distinção de maiúsculas/minúsculas</strong></div>
<div> </div>
<div>Para verificar a existência de um livro independentemente do uso de maiúsculas ou minúsculas, pode-se utilizar LOWER na condição de uma consulta.</div>
<pre>SELECT NomeLivro
FROM Livro
WHERE LOWER(NomeLivro) = 'a arte da eletrônica';</pre>
<div>Essa consulta permitirá encontrar o livro &#8220;A Arte da Eletrônica&#8221; mesmo que seu título esteja registrado com diferentes combinações de maiúsculas e minúsculas.</div>
<div> </div>
<div><strong>Exemplo 3: Padronizar assuntos em letras maiúsculas</strong></div>
<div> </div>
<div>Se os registros na tabela Assunto contiverem uma mistura de letras maiúsculas e minúsculas, podemos usar UPPER para padronizar a exibição desses dados.</div>
<pre>SELECT UPPER(NomeAssunto) AS Assunto
FROM Assunto;</pre>
<div>Essa prática pode facilitar a leitura e garantir que os dados sejam exibidos de forma uniforme em relatórios ou interfaces.</div>
<div> </div>
<div><strong>Exemplo 4: Inserir novos registros padronizados</strong></div>
<div> </div>
<div>Ao inserir novos registros em uma tabela, podemos usar UPPER ou LOWER para garantir que o valor seja armazenado no banco de dados de forma padronizada.</div>
<div> </div>
<div>Exemplo de inserção de um novo autor com o nome e sobrenome convertidos para letras maiúsculas:</div>
<pre>INSERT INTO Autor (NomeAutor, SobrenomeAutor)
VALUES (UPPER('Fábio'), UPPER('dos Reis'));</pre>
<div>Essa técnica pode ajudar a evitar discrepâncias no banco de dados, onde o mesmo nome pode ser inserido com diferentes formas de capitalização.</div>
<div> </div>
<div><strong>Exemplo 5: Converter os nomes e sobrenomes de autores para maiúsculas</strong></div>
<div> </div>
<div>Neste exemplo, podemos exibir os nomes completos dos autores (nome e sobrenome) em letras maiúsculas para um formato mais padronizado.</div>
<pre>SELECT NomeAutor, SobrenomeAutor,
    UPPER(NomeAutor) AS NomeMaiusculo,
    UPPER(SobrenomeAutor) AS SobrenomeMaiusculo
FROM Autor;</pre>
<div>Esse formato é útil quando se deseja uma apresentação visual consistente de dados textuais.</div>
<div> </div>
<h2 id="trim-rtrim-ltrim">Funções LTRIM, RTRIM e TRIM</h2>
<div>As funções LTRIM, RTRIM e TRIM são usadas para remover espaços em branco (ou caracteres específicos) no início, no final ou em ambos os lados de uma string. Úteis quando se deseja limpar ou padronizar dados textuais.</div>
<div> </div>
<div>Sintaxes</div>
<pre><span style="color: #800080;">LTRIM(expressão)</span>
<span style="color: #800080;">RTRIM(expressão)</span>
<span style="color: #800080;">TRIM([caracteres FROM] expressão)</span></pre>
<div>Onde:</div>
<ul>
<li><strong>expressão</strong>: string que será modificada.</li>
<li><strong>caracteres</strong>: Caracteres que se deseja remover. Se omitido, remove espaços em branco.</li>
</ul>
<div> </div>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Remover espaços em branco no início dos nomes de livros</strong></div>
<div> </div>
<div>Se houver registros na tabela Livro com espaços em branco antes do nome do livro, podemos usar LTRIM em uma consulta para remover esses espaços ao exibi-los.</div>
<pre>SELECT NomeLivro, LTRIM(NomeLivro) 'Nome Ajustado'
FROM Livro;</pre>
<div>Neste exemplo, a consulta retornará o nome original do livro e sua versão sem os espaços em branco no início. Isso é útil para garantir que os dados sejam exibidos de forma consistente.</div>
<div> </div>
<div>Exemplo 2: Remover espaços antes do sobrenome dos autores</div>
<div>Se os sobrenomes dos autores contiverem espaços em branco indesejados no início, podemos usar LTRIM para remover esses espaços.</div>
<div> </div>
<div>SELECT SobrenomeAutor, LTRIM(SobrenomeAutor) AS SobrenomeAjustado</div>
<div>FROM Autor;</div>
<div> </div>
<div>Isso garante que os sobrenomes sejam exibidos corretamente, sem espaços extras no início.</div>
<div> </div>
<div><strong>Exemplo 2: Remover espaços em branco no final dos nomes de editoras</strong></div>
<div> </div>
<div>Caso algum nome de editora na tabela Editora tenha sido registrado com espaços em branco no final, RTRIM pode ser usado para corrigir isso.</div>
<pre>SELECT NomeEditora, RTRIM(NomeEditora) AS 'Nome da Editora Ajustado'
FROM Editora;</pre>
<div>Neste exemplo, o nome da editora será retornado sem os espaços extras no final, garantindo que os dados estejam corretamente formatados.</div>
<div> </div>
<div>Exemplo 5: Remover espaços em branco no início e no final dos títulos de livros ao mesmo tempo</div>
<div> </div>
<div>Para garantir que os títulos dos livros na tabela Livro estejam sem espaços em branco no início e no final em ua consulta, podemos usar a função TRIM.</div>
<pre>SELECT NomeLivro, TRIM(NomeLivro) AS NomeLivroAjustado
FROM Livro;</pre>
<div>Isso remove qualquer espaço em branco extra no início e no final do título dos livros, garantindo que os dados estejam limpos.</div>
<div> </div>
<div><strong>Exemplo 3: Remover caracteres específicos de uma string</strong></div>
<div> </div>
<div>A função TRIM também pode ser usada para remover outros caracteres além dos espaços em branco. Suponha que, por algum motivo, os títulos de alguns livros foram armazenados com um caractere de asterisco (*) no início e no final. Podemos usar TRIM para remover esses caracteres.</div>
<pre>SELECT NomeLivro, TRIM('*' FROM NomeLivro) AS NomeLivroLimpo
FROM Livro;</pre>
<div>Esse exemplo remove os asteriscos do início e do final dos nomes dos livros, garantindo que apenas o título adequado seja exibido.</div>
<div> </div>
<div><strong>Exemplo 4: Atualizar registros para remover espaços indesejados</strong></div>
<div> </div>
<div>Ao identificar espaços em branco indesejados nos dados, podemos usar as funções LTRIM, RTRIM e TRIM em uma cláusula UPDATE para corrigir permanentemente os valores no banco de dados.</div>
<div> </div>
<div>Por exemplo, para remover espaços no início e no final dos nomes das editoras cadastradas, alterando esses dados na tabela, podemos usar TRIM:</div>
<pre>UPDATE Editora
SET NomeEditora = TRIM(NomeEditora);</pre>
<div>Esse comando atualiza todos os registros da tabela Editora, removendo qualquer espaço extra no início ou no final dos nomes. Note que não usamos cláusula WHERE aqui, pois queremos que a atualização seja aplicada a todas as linhas da tabela.</div>
<div> </div>
<div><strong>Exemplo 5: Inserir dados sem espaços indesejados</strong></div>
<div> </div>
<div>Ao inserir novos dados, também é possível utilizar TRIM para garantir que os valores sejam armazenados corretamente. Por exemplo, ao cadastrar um novo autor, podemos garantir que o nome e sobrenome sejam armazenados sem espaços indesejados porventura digitados pelo usuário:</div>
<pre>INSERT INTO Autor (NomeAutor, SobrenomeAutor)
VALUES (TRIM(' Fábio '), TRIM(' dos Reis '));</pre>
<div>Essa técnica impede que valores com espaços indesejados sejam armazenados no banco de dados.</div>
<div> </div>
<h2 id="left-right">Funções LEFT e RIGHT</h2>
<div>As funções LEFT e RIGHT são usadas para extrair partes de uma string, com base no número de caracteres contados a partir da esquerda ou da direita, respectivamente.</div>
<div> </div>
<div>A função LEFT retorna os primeiros &#8220;n&#8221; caracteres de uma string, a partir da esquerda. Já a função RIGHT retorna os últimos &#8220;n&#8221; caracteres de uma string, contados a partir da direita.</div>
<div> </div>
<div>Sintaxes:</div>
<pre><span style="color: #800080;">LEFT(string, número_de_caracteres)</span></pre>
<div>onde:</div>
<ul>
<li><strong>string</strong>: A string original da qual se deseja extrair os caracteres.</li>
<li><strong>número_de_caracteres</strong>: O número de caracteres a ser extraído, começando pela esquerda.</li>
</ul>
<pre><span style="color: #800080;">RIGHT(string, número_de_caracteres)</span></pre>
<div><strong>Exemplo 1: Extrair os 4 últimos caracteres do ISBN com RIGHT</strong></div>
<div> </div>
<div>Em nosso banco de dados, a tabela Livro contém a coluna ISBN13, que armazena o número ISBN dos livros. Podemos querer extrair os últimos 4 caracteres do ISBN para identificar o título e dígito verificador da obra.</div>
<pre>SELECT ISBN13,
    RIGHT(ISBN13, 4) AS 'Título e DV'
FROM Livro;</pre>
<div><strong>Exemplo 2: Extrair as iniciais dos nomes dos autores</strong></div>
<div> </div>
<div>Na tabela Autor, temos os nomes armazenados na coluna NomeAutor. Caso queiramos extrair os primeiros 2 caracteres dos nomes dos autores, podemos usar a função LEFT.</div>
<pre>SELECT NomeAutor,
    LEFT(NomeAutor, 2) AS 'Iniciais Autor'
FROM Autor;</pre>
<div><strong>Exemplo 3: Extrair o ano de publicação com LEFT</strong></div>
<div> </div>
<div>Caso a data de publicação dos livros esteja armazenada na coluna DataPub no formato YYYY-MM-DD, podemos usar a função LEFT para extrair o ano da publicação (os 4 primeiros dígitos internamente).</div>
<pre>SELECT NomeLivro,
    LEFT(CAST(DataPub AS VARCHAR), 4) AS AnoPublicacao
FROM Livro;</pre>
<div>Na verdade o ideal, neste caso, seria usar uma função de manipulação de datas, que é mais adequado.</div>
<div> </div>
<h2 id="replace">Função REPLACE</h2>
<div>A função REPLACE é usada para substituir todas as ocorrências de uma substring por outra dentro de uma string. É útil para realizar transformações em dados de texto.</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #993366;">REPLACE(string_original, substring_antiga, substring_nova)</span></pre>
<div>onde:</div>
<ul>
<li><strong>string_original:</strong> A string na qual a substituição será realizada.</li>
<li><strong>substring_antiga</strong>: O texto que será substituído.</li>
<li><strong>substring_nova</strong>: O novo texto que substituirá a substring antiga.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Trocar todas as ocorrências de &#8220;Server 2010&#8221; por &#8220;Server 2020&#8221; nos nomes dos livros</strong></div>
<pre><strong>UPDATE Livro</strong>
<strong>SET NomeLivro = REPLACE(NomeLivro, '2010', '2020')</strong>
<strong>WHERE NomeLivro LIKE '%Server 2010%';</strong>
<span style="color: #339966;"><strong>-- Teste:</strong></span>
<strong>SELECT * FROM Livro;</strong></pre>
<div><strong>Exemplo 2: Remover traços do ISBN dos livros</strong></div>
<div> </div>
<div>Se os números de ISBN dos livros forem inseridos com traços (por exemplo, 978-85-254-0417-9), pode ser necessário removê-los para padronizar o formato. Podemos usar a função REPLACE para remover os traços.</div>
<div>
<pre>UPDATE Livro
SET ISBN13 = REPLACE(ISBN13, '-', '')
WHERE ISBN13 LIKE '%-%';</pre>
</div>
<div>Neste caso, mandamos substituir os traços por nada, denotado pelas aspas simples sem conteúdo (nem mesmo um espaço em branco) no terceiro parâmetro passado à função.</div>
<div> </div>
<h2 id="substring">Função SUBSTRING</h2>
<div>A função SUBSTRING é utilizada para extrair uma parte de uma string a partir de uma posição inicial e com um comprimento específico. Permite selecionar trechos de texto dentro de colunas de tipos de caracteres, como VARCHAR, CHAR, TEXT</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;">SUBSTRING(expressão, início, comprimento)</span></pre>
<div>onde:</div>
<ul>
<li><strong><em>expressão</em>:</strong> A expressão de string ou a coluna da qual se deseja extrair uma parte.</li>
<li><strong><em>início</em></strong>: A posição inicial (1 baseada) da extração.</li>
<li><strong><em>comprimento</em></strong>: O número de caracteres a serem extraídos.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Extrair os três primeiros caracteres de um título de livro</strong></div>
<div> </div>
<div>Suponha que queiramos extrair os três primeiros caracteres da coluna NomeLivro da tabela Livro. Esta operação pode ser útil para criar códigos ou siglas a partir dos títulos dos livros.</div>
<pre>SELECT NomeLivro, SUBSTRING(NomeLivro, 1, 3) AS SiglaLivro
FROM Livro;</pre>
<div><strong>Exemplo 2: Alterar nomes das editoras para que iniciem com uma letra maiúscula</strong></div>
<div> </div>
<div>Primeiramente vamos colocar os nomes das editoras em letras maiúsculas:</div>
<pre>UPDATE Editora
SET NomeEditora = UPPER(NomeEditora);

SELECT * FROM Editora;</pre>
<div>Agora vamos alterar os nomes das editoras para que apenas iniciem com uma letra maiúscula, com o restante do nome em minúsculas.</div>
<pre>UPDATE Editora
SET NomeEditora = UPPER(LEFT(NomeEditora, 1)) + LOWER(SUBSTRING(NomeEditora, 2, LEN(NomeEditora)))
WHERE NomeEditora IS NOT NULL;</pre>
<div><strong>3. Extrair o ano de publicação a partir da coluna DataPub</strong></div>
<div> </div>
<div>No caso da coluna DataPub que armazena a data de publicação dos livros no formato YYYY-MM-DD, pode-se usar a função SUBSTRING para extrair o ano diretamente a partir da string da data. Vamos considerar que a coluna DataPub seja uma VARCHAR.</div>
<pre>SELECT NomeLivro, DataPub, SUBSTRING(DataPub, 1, 4) AS AnoPublicacao
FROM Livro;</pre>
<div>Uma outra alternativa para executar esta tarefa é usar funções de manipulação de <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">data e hora</a>, que possuem recursos mais adequados para o tratamento deste tipo de dado.</div>
<div> </div>
<h2 id="concat">Função CONCAT</h2>
<div>Uma das funções de manipulação de strings mais usadas no SQL Server, a função CONCAT permite concatenar (unir) duas ou mais strings em uma única string. Útil quando precisamos combinar dados de diferentes colunas ou acrescentar textos adicionais para formar uma nova informação.</div>
<div> </div>
<div>Esta função aceita múltiplos parâmetros, as strings a serem unidas. O SQL Server converte automaticamente os valores não strings em texto</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;">CONCAT(valor1, valor2, valor3, ...)</span></pre>
<div>onde:</div>
<ul>
<li><em><strong>valor1, valor2, &#8230;</strong></em>: Valores que serão concatenados. Podem ser colunas, literais ou expressões.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Concatenação simples de strings.</strong></div>
<pre>SELECT CONCAT('Fábio ', 'dos Reis') AS 'Nome Cliente';</pre>
<div><strong>Exemplo 2: Concatenar nomes e sobrenomes dos autores</strong></div>
<div> </div>
<div>A tabela Autor possui as colunas NomeAutor e SobrenomeAutor, que armazenam, respectivamente, o nome e o sobrenome dos autores. Para exibir o nome completo, podemos concatenar essas duas colunas.</div>
<pre>SELECT CONCAT(NomeAutor, ' ', SobrenomeAutor) AS 'Nome Completo do Autor'
FROM Autor;</pre>
<div><strong>Exemplo 3: Concatenar ISBN e Nome do Livro</strong></div>
<div> </div>
<div>Na tabela Livro, podemos querer criar uma coluna que mostre tanto o nome do livro quanto o número ISBN13 em uma única string, para facilitar a identificação.</div>
<pre>SELECT NomeLivro,
    ISBN13,
    CONCAT(NomeLivro, ' (ISBN: ', ISBN13, ')') AS LivroComISBN
FROM Livro;</pre>
<div><strong>Exemplo 4: Concatenar Data de Publicação Formatada</strong></div>
<div> </div>
<div>Em alguns casos, podemos querer exibir a data de publicação de um livro com um formato específico. Usando CONCAT, é possível combinar a data com outras informações para gerar um texto descritivo.</div>
<pre>SELECT NomeLivro,
    DataPub,
    CONCAT('O livro "', NomeLivro, '" foi publicado em ', DataPub) AS DescricaoPublicacao
FROM Livro;</pre>
<h3>Conclusão</h3>
<div>Neste artigo estudamos as <a href="https://learn.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-server-ver16" target="_blank" rel="noopener">funções para manipulação de strings</a> mais comuns no SQL Server, incluindo suas sintaxes e alguns exemplos de uso de cada uma delas. O SQL Server oferece uma grande quantidade de funções para a realização de diversas tarefas, além da manipulação de strings, que incluem cálculos numéricos, manipulação temporal (data e hora), funções administrativas, e muitas outras que estudaremos nos próximos artigos.</div>
<div> </div>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/">Funções de Manipulação de Strings no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 11 Jul 2024 11:14:56 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20191</guid>

					<description><![CDATA[<p>DELETE FROM &#8211; Apagar Registros no SQL Server A cláusula DELETE FROM em SQL é usada para remover registros de uma tabela. Esta cláusula permite apagar uma ou mais linhas de uma tabela com base em uma condição especificada na cláusula WHERE. Se a cláusula WHERE não for usada, todos os registros da tabela serão removidos (cuidado!!!). Sintaxe Básica DELETE FROM nome_da_tabela WHERE condição; Exemplos 1. Apagar registros específicos Se quisermos remover todos os livros da tabela Livro cujo preço é maior que R$ 100,00: DELETE FROM Livro WHERE PrecoLivro &#62; 100.00; 2. Apagar todas as linhas de uma tabela Podemos remover todos os registros da tabela Autor, deixando a tabela vazia: DELETE FROM Autor; Observações importantes Integridade Referencial: Ao excluir registros que são referenciados por chaves estrangeiras em outras tabelas, é importante considerar as restrições de integridade referencial para evitar a violação dessas restrições. Backups: Antes de executar operações de exclusão em massa, é altamente recomendável fazer backup dos dados, pois a operação de DELETE é irreversível (não tem Ctrl+Z!!!). Performance: Para limpar totalmente tabelas grandes, operações de DELETE podem ser lentas e consumir muitos recursos. Em alguns casos, pode ser mais eficiente truncar a tabela (usando TRUNCATE TABLE) [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/">Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>DELETE FROM &#8211; Apagar Registros no SQL Server</h2>
<p>A cláusula <strong>DELETE FROM</strong> em SQL é usada para remover registros de uma tabela. Esta cláusula permite apagar uma ou mais linhas de uma tabela com base em uma condição especificada na <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/13-t-sql-where-filtrando-registros-em-uma-consulta-sql-server/">cláusula WHERE</a>. Se a cláusula WHERE não for usada, todos os registros da tabela serão removidos (cuidado!!!).</p>
<h3>Sintaxe Básica</h3>
<pre><span style="color: #800080;"><strong>DELETE FROM nome_da_tabela</strong></span>
<span style="color: #800080;"><strong>WHERE condição;</strong></span></pre>
<h3>Exemplos</h3>
<p>1. Apagar registros específicos</p>
<p>Se quisermos remover todos os livros da tabela Livro cujo preço é maior que R$ 100,00:</p>
<pre><strong>DELETE FROM Livro</strong>
<strong>WHERE PrecoLivro &gt; 100.00;</strong></pre>
<p>2. Apagar todas as linhas de uma tabela</p>
<p>Podemos remover todos os registros da tabela Autor, deixando a tabela vazia:</p>
<pre><strong>DELETE FROM Autor;</strong></pre>
<h3>Observações importantes</h3>
<p><strong>Integridade Referencial</strong>: Ao excluir registros que são referenciados por chaves estrangeiras em outras tabelas, é importante considerar as restrições de integridade referencial para evitar a violação dessas restrições.<br />
<strong>Backups</strong>: Antes de executar operações de exclusão em massa, é altamente recomendável fazer <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-realizar-backup-e-restore-no-microsoft-sql-server/">backup dos dados</a>, pois a operação de DELETE é irreversível (não tem Ctrl+Z!!!).<br />
<strong>Performance</strong>: Para limpar totalmente tabelas grandes, operações de DELETE podem ser lentas e consumir muitos recursos. Em alguns casos, pode ser mais eficiente truncar a tabela (usando <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/9-t-sql-truncate-table-excluindo-todos-os-dados-de-uma-tabela-sql-server/">TRUNCATE TABLE</a>) ou recriá-la.</p>
<p>Para saber mais sobre SQL DELETE, assista a um vídeo da Bóson Treinamentos no YouTube:</p>
<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/XW37gfHvofE?si=5wu4UW_rjuYGYIgf" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/">Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 04 Jul 2024 11:42:32 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[Modelagem de Dados]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=13125</guid>

					<description><![CDATA[<p>Tipos de dados char, nchar, varchar e nvarchar &#8211; SQL Server Os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR são usados para armazenar dados de texto no SQL Server. Cada um é empregado em uma situação distinta, e saber escolher o tipo de dados adequado pode afetar a performance e o uso de espaço no banco de dados. Neste tutorial vou mostrar cada um desses tipos, suas diferenças e quando usá-los. Tipos de Texto no SQL Server Os tipos nchar e nvarchar permitem armazenar caracteres Unicode, ao passo que char e varchar não o permitem &#8211; é até possível armazenar Unicode com esses tipos, mas por meio de alguns &#8220;truques&#8221; no código. Porém, os tipos nchar e nvarchar ocupam o dobro de espaço de armazenamento. Desta forma, recomenda-se utilizá-los apenas caso seja necessário suporte a Unicode na tabela &#8211; o que é bastante comum. Os tipos char e nchar são tipos de tamanho fixo, o que significa que eles reservam espaço de armazenamento para a quantidade de caracteres que foi especificada em suas declarações, mesmo que o espaço não seja totalmente utilizado. Por exemplo, podemos criar um campo char ou nchar para 20 caracteres mas armazenar apenas 15 &#8211; [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/">Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tipos de dados char, nchar, varchar e nvarchar &#8211; SQL Server</h2>
<p>Os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR são usados para armazenar dados de texto no SQL Server. Cada um é empregado em uma situação distinta, e saber escolher o tipo de dados adequado pode afetar a performance e o uso de espaço no banco de dados.</p>
<p>Neste tutorial vou mostrar cada um desses tipos, suas diferenças e quando usá-los.</p>
<h3>Tipos de Texto no SQL Server</h3>
<p>Os tipos nchar e nvarchar permitem armazenar caracteres Unicode, ao passo que char e varchar não o permitem &#8211; é até possível armazenar Unicode com esses tipos, mas por meio de alguns &#8220;truques&#8221; no código. Porém, os tipos nchar e nvarchar ocupam o dobro de espaço de armazenamento. Desta forma, recomenda-se utilizá-los apenas caso seja necessário suporte a Unicode na tabela &#8211; o que é bastante comum.</p>
<p>Os tipos char e nchar são tipos de tamanho fixo, o que significa que eles reservam espaço de armazenamento para a quantidade de caracteres que foi especificada em suas declarações, mesmo que o espaço não seja totalmente utilizado. Por exemplo, podemos criar um campo char ou nchar para 20 caracteres mas armazenar apenas 15 &#8211; os outros 5 que ficaram vagos irão ocupar espaço da mesma maneira.</p>
<p>Recomenda-se usar esses tipos caso os dados armazenados sempre ocupem o tamanho máximo especificado na declaração da coluna.</p>
<p>Já os tipos varchar e nvarchar são tipos de tamanho variável, de modo que o espaço ocupado corresponderá à quantidade de caracteres que efetivamente são armazenados + 2 (2 bytes de registro do comprimento &#8211; overhead), independente do tamanho máximo declarado.</p>
<h3>Características dos tipos CHAR, NCHAR, VARCHAR e NVARCHAR</h3>
<p><strong>CHAR</strong></p>
<ul>
<li>Descrição: Armazena dados de texto com comprimento fixo.</li>
<li>Tamanho: O comprimento é definido ao criar a coluna e todos os valores terão exatamente esse tamanho &#8211; ou seja, o comprimento é fixo. <em>Espaços em branco são adicionados para preencher o comprimento se necessário</em>.</li>
<li>Uso: Dados de tamanho fixo, como códigos de produtos ou identificadores.</li>
</ul>
<p><strong>NCHAR</strong></p>
<ul>
<li>Descrição: Similar ao CHAR (também comprimento fixo), mas armazena dados de texto em formato Unicode.</li>
<li>Tamanho: Cada caractere ocupa 2 bytes, permitindo armazenar caracteres de múltiplos idiomas.</li>
<li>Uso: Usado para dados de texto internacionalizados ou quando é necessário suportar vários idiomas.</li>
</ul>
<p><strong>VARCHAR</strong></p>
<ul>
<li>Descrição: Armazena dados de texto com comprimento variável.</li>
<li>Tamanho: O comprimento máximo é definido ao criar a coluna, mas apenas o espaço necessário para armazenar o valor real é utilizado. Ou seja, ocupa espaço de acordo com o valor armazenado na coluna.</li>
<li>Uso: Ideal para colunas onde os tamanhos dos valores podem variar significativamente, como nomes, descrições ou endereços.</li>
</ul>
<p><strong>NVARCHAR</strong></p>
<ul>
<li>Descrição: Similar ao VARCHAR, mas armazena dados de texto em formato Unicode.</li>
<li>Tamanho: Cada caractere ocupa 2 bytes, semelhante ao NCHAR, mas o espaço é utilizado de forma mais eficiente para comprimentos variáveis.</li>
<li>Uso: Usado para dados de texto internacionalizados ou quando é necessário suportar vários idiomas, com comprimentos variáveis.</li>
</ul>
<h3>Performance dos tipos de texto</h3>
<p>Com relação à performance desses tipos de texto no SQL Server, temos que:</p>
<ul>
<li>CHAR e NCHAR podem ser mais rápidos para acesso em colunas onde todos os valores têm tamanho fixo.</li>
<li>Já os tipos VARCHAR e NVARCHAR são mais eficientes em termos de espaço para colunas onde os tamanhos dos valores variam.</li>
</ul>
<h3>Exemplos de uso</h3>
<h4>1. Tipos CHAR e NCHAR</h4>
<p>Criamos uma tabela com dois campos, um do tipo CHAR e outro do tipo NCHAR</p>
<pre><strong>CREATE TABLE ExemploCharNChar (</strong>
<strong>Codigo CHAR(5),</strong>
<strong>Item NCHAR(10)</strong>
<strong>);</strong></pre>
<p>Inserimos uma linha de teste nessa tabela. Para o campo &#8220;Item&#8221; usarei um dado em outro idioma, inclusive com outro conjunto de caracteres &#8211; no caso, caracteres japoneses.</p>
<p>Note o caractere &#8216;N&#8217; que precede o valor a ser armazenado, para indicar ao SQL Server que se trata de um valor Unicode.</p>
<pre><strong>INSERT INTO ExemploCharNChar (Codigo, Item)</strong>
<strong>VALUES ('012', N'ピザ');</strong></pre>
<p>Consegue descobrir que item foi inserido?</p>
<p>E realizamos uma consulta para ver o dado inserido.</p>
<pre><strong>SELECT * FROM ExemploCharNChar;</strong></pre>
<p><strong>Resultado:</strong></p>
<pre><span style="color: #000000;"><strong>Codigo  Item</strong></span>
<span style="color: #000000;"><strong>012     ピザ </strong></span></pre>
<h4>2. Tipos VARCHAR e NVARCHAR</h4>
<p>Agora vamos criar outra tabela também com dois campos, um do tipo VARCHAR e outro do tipo NVARCHAR</p>
<pre><strong>CREATE TABLE ExemploVarcharNVarchar (</strong>
<strong>Descricao VARCHAR(50),</strong>
<strong>Pedido NVARCHAR(100)</strong>
<strong>);</strong></pre>
<p>Inserimos uma linha de teste nessa tabela. Para o campo &#8220;Pedido&#8221; usarei novamente um dado em idioma japonês, desta vez com mais caracteres.</p>
<pre><strong>INSERT INTO ExemploVarcharNVarchar (Descricao, Pedido)</strong>
<strong>VALUES ('Prato Típico Italiano', N'ピザが食べたい.');</strong></pre>
<p>E realizamos a consulta para ver o dado inserido.</p>
<pre><strong>SELECT * FROM ExemploVarcharNVarchar;</strong></pre>
<p><strong>Resultado:</strong></p>
<pre><span style="color: #000000;"><strong>Descricao             Pedido</strong></span>
<span style="color: #000000;"><strong>Prato Típico Italiano ピザが食べたい.</strong></span></pre>
<h3>Importante</h3>
<p>Uma dica importante é a seguinte: Hoje em dia, os sistemas operacionais e plataformas de desenvolvimento usam internamente o sistema Unicode.</p>
<p>Sendo assim, se usarmos os tipos nvarchar em vez de varchar, e nchar em vez de char, evitamos que ocorram conversões de codificação sempre que operaçoes de leitura ou escrita forem realizadas no banco de dados.</p>
<p>Essas conversões consomem recursos do servidor e podem ocasionar erros, ainda que raramente, além do que não é fácil recuperar de erros de conversão em uma tabela.</p>
<h3>Conclusão</h3>
<p>Neste tutorial estudamos os tipos de dados CHAR, NCHAR, VARCHAR e NVARCHAR no SQL Server, suas diferenças e exemplos de uso.</p>
<p>Ao escolher o tipo de dados para colunas de texto, considere o tamanho dos dados que você espera armazenar, a necessidade de suporte a múltiplos idiomas e a eficiência de armazenamento. Para texto que precisa ser armazenado em múltiplos idiomas, use os tipos <strong>NCHAR</strong> ou <strong>NVARCHAR</strong>. Para texto de tamanho fixo, use <strong>CHAR</strong>, e para tamanho variável, use <strong>VARCHAR</strong>.</p>
<p>Lembre-se:</p>
<ul>
<li>Usamos CHAR e NCHAR quando o comprimento dos dados for fixo.</li>
<li>Usamos VARCHAR e NVARCHAR quando o comprimento dos dados for variável.</li>
<li>A letra &#8216;N&#8217; antes dos tipos Unicode (NCHAR e NVARCHAR) indica que eles suportam caracteres Unicode.</li>
</ul>
<p>* <strong>ピザ</strong> significa &#8220;pizza&#8221; e <strong>ピザが食べたい</strong> significa &#8220;quero comer pizza&#8221; (&#8220;piza ga tabetai&#8221;).</p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/">Como usar os tipos de dados char, nchar, varchar e nvarchar no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-usar-os-tipos-de-dados-char-nchar-varchar-e-nvarchar-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Importar arquivo CSV no SQL Server para inserir registros em uma tabela</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 12:06:54 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20025</guid>

					<description><![CDATA[<p>Como importar arquivo CSV no SQL Server Neste tutorial mostro como importar um arquivo no formato CSV para uma tabela de um banco de dados SQL Server, de modo a realizar a inserção de múltiplos registros de uma só vez, por meio de uma operação INSERT INTO. Para tal vamos usar dois arquivos: o arquivo CSV propriamente dito, contendo os dados a serem inseridos na tabela, e um arquivo especificador de formatos para ajustar os dados do arquivo CSV com as colunas específicas da tabela, além é claro do código SQL que executará a tarefa de inserção dos registros em bulk (vários de uma vez). O que é um arquivo CSV? Um arquivo CSV (Comma-Separated Values / Valores Separados por Vírgulas) é um tipo de arquivo de texto simples que armazena dados tabulares de forma estruturada, empregado com frequência para importar e exportar dados entre diferentes programas, sistemas e plataformas. Neste tipo de arquivo, cada linha representa uma entrada de dados (um registro) e cada campo (coluna) é separado por um caractere delimitador, geralmente uma vírgula (&#8220;,&#8221;), ponto e vírgula (&#8220;;&#8221;) ou tabulação (&#8220;tab&#8221;). O mais comum é usar a vírgula, daí o nome do formato. Cada linha no arquivo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/">Importar arquivo CSV no SQL Server para inserir registros em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como importar arquivo CSV no SQL Server</h2>
<p>Neste tutorial mostro como importar um arquivo no formato CSV para uma tabela de um banco de dados SQL Server, de modo a realizar a inserção de múltiplos registros de uma só vez, por meio de uma operação <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/8-t-sql-insert-into-values-inserir-dados-nas-tabelas-sql-server/">INSERT INTO</a>.</p>
<p>Para tal vamos usar dois arquivos: o arquivo CSV propriamente dito, contendo os dados a serem inseridos na tabela, e um arquivo especificador de formatos para ajustar os dados do arquivo CSV com as colunas específicas da tabela, além é claro do código SQL que executará a tarefa de inserção dos registros em bulk (vários de uma vez).</p>
<h3>O que é um arquivo CSV?</h3>
<p>Um arquivo <strong>CSV</strong> (<em>Comma-Separated Values</em> / Valores Separados por Vírgulas) é um tipo de arquivo de texto simples que armazena dados tabulares de forma estruturada, empregado com frequência para importar e exportar dados entre diferentes programas, sistemas e plataformas.</p>
<p>Neste tipo de arquivo, cada linha representa uma entrada de dados (um registro) e cada campo (coluna) é separado por um caractere delimitador, geralmente uma vírgula (&#8220;,&#8221;), ponto e vírgula (&#8220;;&#8221;) ou tabulação (&#8220;tab&#8221;). O mais comum é usar a vírgula, daí o nome do formato.</p>
<p>Cada linha no arquivo representa um registro e os campos podem conter texto, números, datas ou outros tipos de dados quaisquer. Usamos arquivos csv em aplicativos de planilhas, bancos de dados, programas para análise de dados e diversas outras aplicações, pois são bastante simples e fáceis de manipular.</p>
<p>Vamos usar neste tutorial um arquivo CSV de nome Livros.csv, que conterá dados a serem inseridos em uma tabela de nome <strong>Livro</strong>, e com ele vamos cadastrar vários registros de forma rápida e simples.</p>
<h3>Arquivo CSV de exemplo: Livros.csv</h3>
<p>A seguir temos o conteúdo do arquivo a ser usado no exemplo de inserção de linhas na tabela. Neste arquivo, a primeira linha é uma linha de cabeçalho, contendo os nomes das colunas da tabela que receberá os dados (tabela de nome <strong>Livro</strong>), separados por vírgulas. Você deve alterar o conteúdo desse arquivo de acordo com a tabela do banco que está usando, seguindo as instruções na sequência.</p>
<p>As linhas subsequentes contém os dados em si, sendo que cada linha do arquivo corresponde a uma linha a ser inserida na tabela (um registro), também separadas por vírgulas, seguindo a mesma ordem das colunas descritas no cabeçalho:</p>
<pre><span style="color: #800080;"><strong>NomeLivro,ISBN13,DataPub,PreçoLivro,NumeroPaginas,IdEditora,IdAssunto</strong></span>
<span style="color: #800080;"><strong>2001 - Um Odisséia no Espaço,9788576571551,20200930,55.86,336,3,1</strong></span>
<span style="color: #800080;"><strong>Fahrenheit 451,9788525052247,20120601,43.56,216,3,1</strong></span>
<span style="color: #800080;"><strong>Admirável mundo novo,9788525056009,20140101,50.32,312,3,1</strong></span>
<span style="color: #800080;"><strong>1984,9788535914849,20090721,29.67,416,14,1</strong></span>
<span style="color: #800080;"><strong>A volta ao mundo em 80 dias,9788537816134,18730101,59.41,256,11,5</strong></span>
<span style="color: #800080;"><strong>O Nome da Rosa,9788501115829,20191216,51.99,592,18,5</strong></span>
<span style="color: #800080;"><strong>Memórias Póstumas de Brás Cubas,9788525433131,18810101,34.90,240,14,6</strong></span>
<span style="color: #800080;"><strong>O Evangelho Segundo Jesus Cristo,9788535905595,19910101,49.90,512,14,6</strong></span>
<span style="color: #800080;"><strong>Cidades Invisíveis,9788535907445,19720101,42.80,176,14,6</strong></span>
<span style="color: #800080;"><strong>Windows Server 2016: Installing &amp; Configuring,9781535074094,20160712,432.00,436,4,11</strong></span>
<span style="color: #800080;"><strong>Ensaio Sobre a Cegueira,9788571645118,19950101,39.90,312,14,6</strong></span>
<span style="color: #800080;"><strong>Ulisses,9780141184432,19220202,78.90,450,16,6</strong></span>
<span style="color: #800080;"><strong>Practical Electronics for Inventors,9781259587542,20160711,212.58,1056,9,3</strong></span>
<span style="color: #800080;"><strong>Eu Robô,9788576571667,19501202,35.00,300,3,1</strong></span>
<span style="color: #800080;"><strong>Dom Casmurro,9788525404186,19000101,19.90,256,14,6</strong></span></pre>
<p>Insira esse conteúdo em um arquivo de texto simples vazio, como um arquivo do bloco de notas no Windows, e salve com o nome de Livros.csv. Caso queira, acrescente mais livros à listagem. Não é necessário usar aspas para delimitar os dados do tipo VARCHAR ou DATE.</p>
<p>Obs.: Tome cuidado ao salvar o arquivo para não salvá-lo com a extensão <strong>.txt</strong>!!! Para evitar esse problema, selecione &#8220;<em>Todos os arquivos</em>&#8221; em &#8220;<em>Tipo</em>&#8221; na caixa de diálogo Salvar, e certifique-se de usar a codificação <strong>UTF-8</strong>, como segue:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-20026" title="Como salvar um arquivo no formato CSV no Bloco de Notas" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson.jpg" alt="Como salvar um arquivo no formato CSV no Bloco de Notas" width="600" height="133" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson.jpg 780w, https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson-420x93.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson-768x170.jpg 768w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>A seguir criaremos o arquivo de formato XML a ser usado com esse csv.</p>
<h3>Arquivo de Formato XML</h3>
<p>Um arquivo de formato é um arquivo do tipo XML (<em>e<strong>X</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage</em>) que descreve a estrutura dos dados contidos no arquivo CSV, especificando como os campos são delimitados, o comprimento máximo de cada campo e como esses campos são mapeados para as colunas da tabela do banco de dados durante o processo de importação de dados em massa..</p>
<p>O arquivo que usaremos possui o nome formato.xml. Crie-o com um editor de textos, usando o conteúdo a seguir, e salve-o no mesmo diretório do arquivo Livros.CSV:</p>
<pre class="a-b-r-La"><strong>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
  &lt;RECORD&gt;
    &lt;FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100"/&gt;
    &lt;FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="13"/&gt;
    &lt;FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="8"/&gt;
    &lt;FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="19"/&gt;
    &lt;FIELD ID="5" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="10"/&gt;
    &lt;FIELD ID="6" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="5"/&gt;
    &lt;FIELD ID="7" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="5"/&gt;
  &lt;/RECORD&gt;
  &lt;ROW&gt;
    &lt;COLUMN SOURCE="1" NAME="NomeLivro" xsi:type="SQLVARYCHAR"/&gt;
    &lt;COLUMN SOURCE="2" NAME="ISBN13" xsi:type="SQLVARYCHAR"/&gt;
    &lt;COLUMN SOURCE="3" NAME="DataPub" xsi:type="SQLDATE"/&gt;
    &lt;COLUMN SOURCE="4" NAME="PrecoLivro" xsi:type="SQLMONEY"/&gt;
    &lt;COLUMN SOURCE="5" NAME="NumeroPaginas" xsi:type="SQLSMALLINT"/&gt;
    &lt;COLUMN SOURCE="6" NAME="IdEditora" xsi:type="SQLSMALLINT"/&gt;
    &lt;COLUMN SOURCE="7" NAME="IdAssunto" xsi:type="SQLTINYINT"/&gt;
  &lt;/ROW&gt;
&lt;/BCPFORMAT&gt;</strong></pre>
<p>O funcionamento deste arquivo é o seguinte:</p>
<ul>
<li><strong>&lt;BCPFORMAT&gt;</strong>: Elemento raiz do arquivo XML que define o formato do arquivo de dados.</li>
<li><strong>&lt;RECORD&gt;</strong>: Define a estrutura de cada registro (linha) no arquivo CSV.</li>
<li><strong>&lt;FIELD&gt;</strong>: Define os campos (colunas) do registro. Cada tag <strong>&lt;FIELD&gt;</strong> especifica o identificador do campo (ID), o tipo de terminador que separa os campos (TERMINATOR), e o comprimento máximo (MAX_LENGTH) do campo.</li>
<li><strong>&lt;ROW&gt;</strong>: Define a correspondência entre os campos do arquivo CSV e as colunas da tabela do banco de dados.</li>
<li><strong>&lt;COLUMN&gt;</strong>: Especifica como cada campo do arquivo CSV (<em>SOURCE</em>) é mapeado para uma coluna na tabela do banco de dados (<em>NAME</em>). Além disso, define o tipo de dados da coluna (xsi:type), que pode ser:
<ul>
<li><strong>SQLVARYCHAR</strong> para strings</li>
<li><strong>SQLDATE</strong> para datas</li>
<li><strong>SQLMONEY</strong> para valores monetários</li>
<li><strong>SQLSMALLINT</strong> para números inteiros pequenos</li>
<li><strong>SQLTINYINT</strong> para números inteiros muito pequenos.</li>
</ul>
</li>
</ul>
<h3>Código SQL</h3>
<p>E a seguir temos o código SQL que deverá ser executado no SQL Server, por exemplo usando o SSMS (SQL Server Management Studio):</p>
<pre><strong>INSERT INTO Livro (NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto)</strong>
<strong>SELECT </strong>
<strong>    NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto</strong>
<strong>FROM OPENROWSET(</strong>
<strong>    BULK 'C:\SQL\Livros.CSV',</strong>
<strong>    FORMATFILE = 'C:\SQL\Formato.xml',</strong>
<strong>CODEPAGE = '65001',  -- UTF-8</strong>
<strong>FIRSTROW = 2</strong>
<strong>) AS LivrosCSV;</strong></pre>
<div>O código opera da seguinte forma:</div>
<div>
<p>1. A linha &#8220;<strong>INSERT INTO Livro (NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto)</strong>&#8221; é a declaração SQL usada para inserir os dados na tabela Livro. Serão preenchidos os campos NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora e IdAssunto.</p>
<p>2. O comando &#8220;<strong>SELECT NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto</strong>&#8221; determina quais colunas do arquivo CSV serão selecionadas para inserção na tabela de livros.</p>
<p>3. &#8220;<strong>FROM OPENROWSET(BULK &#8216;C:\SQL\Livros.CSV&#8217;, FORMATFILE = &#8216;C:\SQL\Formato.xml&#8217;, CODEPAGE = &#8216;65001&#8217;, FIRSTROW = 2)</strong>&#8220;: Aqui, estamos usando a função OPENROWSET para abrir e ler o arquivo CSV especificado. Os parâmetros desta função são:</p>
<ul>
<li><strong>BULK &#8216;C:\SQL\Livros.CSV&#8217;</strong>: Indica o caminho do arquivo CSV que será lido (no caso o arquivo está na pasta SQL dentro da raiz do sistema).</li>
<li><strong>FORMATFILE = &#8216;C:\SQL\Formato.xml</strong>&#8216;: Especifica o arquivo de formato XML que descreve a estrutura do arquivo CSV. Este arquivo de formato é utilizado para especificar detalhes sobre o layout do arquivo CSV, como a ordem das colunas e o delimitador utilizado.</li>
<li><strong>CODEPAGE = &#8216;65001&#8217;</strong>: Define a codificação de caracteres a ser usada durante a leitura do arquivo CSV. Neste caso, o valor 65001 representa a codificação UTF-8.</li>
<li><strong>FIRSTROW = 2</strong>: Indica que a leitura do arquivo CSV começará a partir da segunda linha, de modo a ignorar o cabeçalho do arquivo CSV (que é a primeira linha).</li>
</ul>
<p>4. <strong>AS LivrosCSV;</strong>: Define um <em>alias</em> (nome de correlação) para os dados extraídos do arquivo CSV, permitindo que esses dados sejam referenciados dentro da consulta como se fossem uma tabela temporária chamada LivrosCSV. É um parâmetro obrigatório aqui.</p>
<p>Execute o comando acima no SQL Server, e, se nenhum erro for retornado, verifique a inserção dos registros com um SELECT simples:</p>
<pre><strong>SELECT * FROM Livro;</strong></pre>
</div>
<h3>Conclusão</h3>
<p>Inserir alguns poucos registros em uma tabela de banco de dados é uma tarefa simples e rápida. Porém, cadastrar muitos registros &#8211; centenas, milhares ou até mesmo milhões &#8211; pode se tornar extremamente trabalhoso e demorado, e neste caso podemos recorrer à importação em massa dos dados. Neste tutorial vimos uma forma simples de fazer isso no SQL Server: usando arquivos de texto do tipo CSV.</p>
<p>Nos próximos tutoriais veremos outras formas de importação (e também exportação) de dados em bancos de dados.</p>
<p>Prefere assistir a uma aula? Então assista ao vídeo da Bóson Treinamentos no YouTube sobre Arquivos CSV no MySQL:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/5ddHcVBusQg?si=mV4STXday0y_XeLq" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/">Importar arquivo CSV no SQL Server para inserir registros em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 09 Jun 2023 20:08:07 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/blog/?p=78</guid>

					<description><![CDATA[<p>O que é SQL &#8211; Structured Query Language SQL é uma Linguagem de Consulta Estruturada padrão para acesso a Bancos de Dados Usada em inúmeros sistemas, como MySQL, SQL Server, Oracle, Sybase, Access, DB2, PostgreSQL, etc. Cada um desses sistemas pode utilizar um &#8220;dialeto&#8221; diferente do SQL, como T-SQL (SQL Server), PL/SQL (Oracle), JET SQL (Access), etc. História Resumida do SQL Foi o matemático britânico Edgar F. Codd, no início dos anos 1970, quem propôs o famoso modelo relacional para bancos de dados e, sendo um matemático, ele formalizou diversos conceitos resultando no que chamamos de álgebra relacional e cálculo relacional. Essa álgebra e cálculo relacional eram conceitos teóricos até que empresas como a IBM e outras começaram a implementar esses conceitos em projetos internos, acadêmicos e de pesquisa. Essas empresas também queriam criar uma linguagem que fosse padrão para realizar consultas em bancos de dados relacionais. No início, foi desenvolvida uma linguagem chamada de QUEL (Querying Using the English Language / Consulta Usando a Língua Inglesa), na Universidade da Califórnia, Berkeley. Na IBM especificamente, os pesquisadores queriam criar uma linguagem própria e iniciaram um projeto de nome SQUARE (Specifying Queries Using a Relational Environment / Especificação de Consultas Usando [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/">O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><strong>O que é SQL &#8211; Structured Query Language</strong></h2>
<ul>
<li>SQL é uma Linguagem de Consulta Estruturada padrão para acesso a Bancos de Dados</li>
<li>Usada em inúmeros sistemas, como MySQL, SQL Server, Oracle, Sybase, Access, DB2, PostgreSQL, etc.</li>
<li>Cada um desses sistemas pode utilizar um &#8220;dialeto&#8221; diferente do SQL, como T-SQL (SQL Server), PL/SQL (Oracle), JET SQL (Access), etc.</li>
</ul>
<h3>História Resumida do SQL</h3>
<p>Foi o matemático britânico <a href="https://www.bosontreinamentos.com.br/modelagem-de-dados/as-12-regras-de-codd-para-sistemas-de-bancos-de-dados-relacionais/">Edgar F. Codd</a>, no início dos anos 1970, quem propôs o famoso modelo relacional para bancos de dados e, sendo um matemático, ele formalizou diversos conceitos resultando no que chamamos de álgebra relacional e cálculo relacional.</p>
<p>Essa álgebra e cálculo relacional eram conceitos teóricos até que empresas como a IBM e outras começaram a implementar esses conceitos em projetos internos, acadêmicos e de pesquisa. Essas empresas também queriam criar uma linguagem que fosse padrão para realizar consultas em bancos de dados relacionais.</p>
<p>No início, foi desenvolvida uma linguagem chamada de <strong>QUEL</strong> (<em>Querying Using the English Language</em> / Consulta Usando a Língua Inglesa), na Universidade da Califórnia, Berkeley. Na IBM especificamente, os pesquisadores queriam criar uma linguagem própria e iniciaram um projeto de nome<strong> SQUARE</strong> (<em>Specifying Queries Using a Relational Environmen</em>t / Especificação de Consultas Usando um Ambiente Relacional).</p>
<p>Esse trabalho resultou em uma linguagem de consulta que tinha uma notação científica com subíndices e superíndices, na prática difícil de digitar em teclados de computador (da época). Para resolver isso, a linguagem foi redefinida para usar apenas caracteres padrão da língua inglesa, sendo então batizada de <strong>SEQUEL</strong>. Porém, este nome era uma marca registrada no Reino Unido, o que os impedia de usá-lo. Então, resolveram o problema simplesmente removendo as vogais da palavra SEQUEL, e assim nasceu o termo <strong>SQL</strong>. Em 1986, o SQL se tormou um padrão ISO e ANSI.</p>
<p>De forma interessante, apesar de seus desenvolvedores terem renomeado o SEQUEL para SQL, muitos continuaram a chamá-lo de &#8220;<em>sequel</em>&#8220;. E ainda hoje, muitos desenvolvedores de software e profissionais da área de bancos de dados (de língua inglesa, não no Brasil) ainda pronunciam esse nome como &#8220;sequel&#8221;. A descrição da sigla como sendo <em>Structured Query Language</em> (Linguagem de Consulta Estruturada) foi aparecer posteriormente apenas.</p>
<h3><strong>Funções Principais do SQL</strong></h3>
<ul>
<li>Permite o acesso a dados em SGBDR</li>
<li>Permite definir os dados no banco de dados e manipulá-los.</li>
<li>Pode ser embutido em outras linguagens usando módulos SQL, bibliotecas, etc.</li>
<li>Permite criar e excluir bancos de dados e tabelas.</li>
<li>Permite a criação de Visões (Exibições), Stored Procedures e Funções em um Banco de Dados.</li>
<li>Permite configurar permissões de acesso em tabelas, procedimentos e visões.</li>
</ul>
<h3><strong>Grupos de Comandos</strong></h3>
<p>Os comandos SQL podem ser divididos em quatro grupos principais:</p>
<ul>
<li>DDL</li>
<li>DML</li>
<li>DCL</li>
<li>DQL</li>
</ul>
<h3><strong>DDL – Data Definition Language</strong></h3>
<table style="height: 117px;" width="654">
<tbody>
<tr>
<td style="text-align: center; width: 80px;"><strong>Comando</strong></td>
<td style="text-align: center; width: 558px;"><strong>Descrição</strong></td>
</tr>
<tr>
<td style="width: 80px;">CREATE</td>
<td style="width: 558px;">Cria uma nova tabela, visão ou outro objeto no BD.</td>
</tr>
<tr>
<td style="width: 80px;">ALTER</td>
<td style="width: 558px;">Modifica um objeto existente no BD, como uma tabela.</td>
</tr>
<tr>
<td style="width: 80px;">DROP</td>
<td style="width: 558px;">Exclui uma tabela inteira, uma exibição de uma tabela ou outro objeto no banco de dados.</td>
</tr>
</tbody>
</table>
<h3><strong><br />
DML – Data Manipulation Language</strong></h3>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>INSERT</td>
<td>Cria um registro (linha)</td>
</tr>
<tr>
<td>UPDATE</td>
<td>Modifica registros</td>
</tr>
<tr>
<td>DELETE</td>
<td>Exclui registros</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>DCL – Data Control Language</strong></h3>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>GRANT</td>
<td>Dá privilégios a um usuário</td>
</tr>
<tr>
<td>REVOKE</td>
<td>Retira privilégios fornecidos a um usuário</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>DQL – Data Query Language</strong></h3>
<table style="height: 115px;" width="444">
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>SELECT</td>
<td>Obtém registros especificados de uma ou mais tabelas. (consulta)</td>
</tr>
</tbody>
</table>
<p>O vídeo a seguir explica em detalhes cada um dos grupos de comandos SQL apresentados neste tutorial:</p>
<p><iframe loading="lazy" src="//www.youtube.com/embed/2kWoPT-6JqA?list=PLucm8g_ezqNqI5cW3alteV5olcMCcHYRK" width="640" height="390" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<hr />
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1825" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/01/Eu.png" alt="Eu" width="189" height="147" />Sobre Fábio dos Reis</p>
<p>Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Linux e Open Source em geral, Astrônomo Hobbysta e estudante de idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/">O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Tipos de Data e Hora no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 16 Jul 2020 12:01:58 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16405</guid>

					<description><![CDATA[<p>Tipos de Data e Hora no SQL Server Neste artigo vamos abordar o armazenamento de data e hora em bancos de dados Microsoft SQL Server. Existem seis tipos que permitem armazenar informações temporais (sobre data e/ou hora) no SQL Server. São eles: DATE TIME SMALLDATETIME DATETIME DATETIME2 DATETIMEOFFSET A seguir temos listadas as características principais de cada um desses tipos. Tipo DATE Armazena apenas a data de um evento Não é adequado caso seja necessário armazenar também o horário de um evento Formato padrão de armazenamento: AAAA-MM-DD Permite armazenar datas com valores de 0001-01-01 a 9999-12-31 Ocupa 3 bytes de espaço, e é armazenado como um valor INT O tipo DATE pode ser convertido para DATETIME, SMALLDATETIME, DATETIME2 ou ainda DATETIMEOFFSET; nesses casos, o valor de horário é ajustado para 00:00. Datas no tipo DATE não podem ser convertidas para o tipo TIME. Tipo TIME Usado para registrar o horário específico em que uma atividade ou transação ocorreu. Dados no tipo TIME independem de data Possui precisão de 100 ns, e seu valor padrão é 00:00:00. Formato padrão: hh:mm:ss[.nnnnnnn], onde a parte fracionária (frações de segundo) é representada por nnnnnnn. Faixa de valores: de 00:00:00.0000000 a 23:59:59.9999999 Ocupa 5 bytes [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">Tipos de Data e Hora no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tipos de Data e Hora no SQL Server</h2>
<p>Neste artigo vamos abordar o armazenamento de data e hora em bancos de dados <a href="http://www.bosontreinamentos.com.br/curso-de-microsoft-sql-server/">Microsoft SQL Server</a>. Existem seis tipos que permitem armazenar informações temporais (sobre data e/ou hora) no SQL Server. São eles:</p>
<ul>
<li>DATE</li>
<li>TIME</li>
<li>SMALLDATETIME</li>
<li>DATETIME</li>
<li>DATETIME2</li>
<li>DATETIMEOFFSET</li>
</ul>
<p>A seguir temos listadas as características principais de cada um desses tipos.</p>
<h3>Tipo DATE</h3>
<ul>
<li>Armazena apenas a data de um evento</li>
<li>Não é adequado caso seja necessário armazenar também o horário de um evento</li>
<li>Formato padrão de armazenamento: AAAA-MM-DD</li>
<li>Permite armazenar datas com valores de 0001-01-01 a 9999-12-31</li>
<li>Ocupa 3 bytes de espaço, e é armazenado como um valor INT</li>
<li>O tipo DATE pode ser convertido para DATETIME, SMALLDATETIME, DATETIME2 ou ainda DATETIMEOFFSET; nesses casos, o valor de horário é ajustado para 00:00.</li>
<li>Datas no tipo DATE não podem ser convertidas para o tipo TIME.</li>
</ul>
<h3>Tipo TIME</h3>
<ul>
<li>Usado para registrar o horário específico em que uma atividade ou transação ocorreu.</li>
<li>Dados no tipo TIME independem de data</li>
<li>Possui precisão de 100 ns, e seu valor padrão é 00:00:00.</li>
<li>Formato padrão: hh:mm:ss[.nnnnnnn], onde a parte fracionária (frações de segundo) é representada por nnnnnnn.</li>
<li>Faixa de valores: de 00:00:00.0000000 a 23:59:59.9999999</li>
<li>Ocupa 5 bytes de espaço e não é possível convertê-lo para tipo DATE.</li>
<li>Se convertido para outros tipos de data compostos, a parte da data assumirá o valor 1900-01-01</li>
</ul>
<h3>Tipo SMALLDATETIME</h3>
<ul>
<li>Faixa de valores: 1900-01-01 a 2079-06-06</li>
<li>Ocupa 4 bytes de espaço de armazenamento</li>
<li>Esse tipo não é compatível com o padrão ANSI</li>
<li>Arredonda os segundos de acordo com o valor passado</li>
<li>Não trabalha com fuso horário e nem com horário de verão, assim como os tipos DATE e TIME.</li>
</ul>
<h3>Tipo DATETIME</h3>
<ul>
<li>Este tipo também não segue o padrão SQL. Possui limitações relativas à acurácia de frações de segundo (precisão).</li>
<li>Faixa de valores: 1753-01-01 a 2999-12-31</li>
<li>Tamanho: ocupa 8 bytes de espaço</li>
<li>Não é recomendado por não ser compatível com padrão ANSI</li>
</ul>
<h3>Tipo DATETIME2</h3>
<ul>
<li>Armazena data e hora com precisão de até 100 ns.</li>
<li>É uma boa escolha para cenários onde é necessário armazenar o valor de tempo até frações de segundo</li>
<li>Não apresenta os problemas de arredondamento de DATETIME</li>
<li>Faixa de valores: de 1753-01-01 até 2999-12-31, e hora de 00:00:00 a 23:59:59.9999999</li>
<li>Sua precisão é ajustável, e seu tamanho depende da precisão escolhida.</li>
<li>Limitação: não suporta fuso horário nem horário de verão.</li>
</ul>
<h3>Tipo DATETIMEOFFSET</h3>
<ul>
<li>Este tipo possui alto nível de precisão, até 100 ns</li>
<li>Formato: AAAA-MM-DD hh:mm:ss.nnnnnnn+|-hh:mm, onde +|-hh:mm tem a haver com o offset (deslocamento de tempo)</li>
<li>O offset pode variar de +14 a -14 para o número de horas em que um horário específico pode ser deslocado</li>
<li>Faixa de valores: de 0001-01-01 até 2999-12-31 para datas, e de 00:00:00 até 23:59:59.9999999 para hora.</li>
<li>Tamanho ocupado: 10 bytes, fixo.</li>
</ul>
<h3>Perguntas e Respostas</h3>
<ol>
<li><em><strong>Quais são os tipos de dados usados para trabalhar com data e hora no SQL Server?</strong></em><br />
Os tipos de dados de data e hora no SQL Server são DATE, TIME, DATETIME, DATETIME2, SMALLDATETIME e DATETIMEOFFSET.</li>
<li><em><strong>Qual tipo de dados suporta fuso horário no SQL Server?</strong></em><br />
O tipo que suporta fuso horário (e também horário de verão) é o DATETIMEOFFSET.</li>
<li><em><strong>Preciso armazenar data e hora em um mesmo campo em uma tabela no SQL Server. Qual o tipo de dado mais adequado neste caso?</strong></em><br />
O melhor tipo de dado neste caso é o DATETIME2, que permite armazenar data e hora com precisão de até 100 nanossegundos, sem problemas de arredondamento de valores que existem no tipo DATETIME.</li>
</ol>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">Tipos de Data e Hora no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Introdução aos Cursores no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 02 Mar 2020 14:26:36 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16408</guid>

					<description><![CDATA[<p>Cursores no SQL Server Nesta lição vamos explicar o que são Cursores em Bancos de Dados, e mostrar como utilizar esse recurso em SQL Server. O que é um Cursor A declaração SELECT, empregada para realizar consultas em SQL, retorna um conjunto de linhas que chamamos de &#8220;resultset&#8220;, ou conjunto-resultado. Porém, às vezes é necessário processar dados retornados em uma consulta não em conjuntos, mas uma linha por vez. Para que isto seja possível, usamos um objeto de banco de dados chamado de &#8220;Cursor&#8221;. Os cursores podem ajudar a criar um processo repetível que opere em um registro por vez. Lembrando que manipular registros no SQL Server um por vez quase sempre irá resultar em uma performance inferior em comparação com a manipulação padrão de dados em grupos (blocos). Um cursor seleciona um conjunto de dados, busca um registro por vez desse conjunto, e então modifica o registro atual. Ao terminar a ação requerida no registro, o próximo registro é buscado para ser processado. Basicamente, um cursor é um ponteiro para uma linha em um conjunto de resultados ou uma tabela. Antes de falar sobre operações e modo de funcionamento de cursores, um aviso: Cursores podem ser extremamente lentos. Sempre [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/">Introdução aos Cursores no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Cursores no SQL Server</h2>
<p>Nesta lição vamos explicar o que são Cursores em Bancos de Dados, e mostrar como utilizar esse recurso em SQL Server.</p>
<h3>O que é um Cursor</h3>
<p>A declaração <strong>SELECT</strong>, empregada para realizar consultas em SQL, retorna um conjunto de linhas que chamamos de &#8220;<strong><em>resultset</em></strong>&#8220;, ou conjunto-resultado. Porém, às vezes é necessário processar dados retornados em uma consulta não em conjuntos, mas uma linha por vez.</p>
<p>Para que isto seja possível, usamos um objeto de banco de dados chamado de &#8220;Cursor&#8221;.</p>
<p>Os cursores podem ajudar a criar um processo repetível que opere em um registro por vez.</p>
<p>Lembrando que manipular registros no SQL Server um por vez quase sempre irá resultar em uma performance inferior em comparação com a manipulação padrão de dados em grupos (blocos).</p>
<p>Um cursor seleciona um conjunto de dados, busca um registro por vez desse conjunto, e então modifica o registro atual. Ao terminar a ação requerida no registro, o próximo registro é buscado para ser processado. Basicamente, um cursor é um ponteiro para uma linha em um conjunto de resultados ou uma tabela.</p>
<p>Antes de falar sobre operações e modo de funcionamento de cursores, um aviso: <em><strong>Cursores podem ser extremamente lentos</strong></em>. Sempre que possível, tente usar outro tipo de estrutura no lugar de um cursor, como subconsultas, procedimentos armazenados, funções definidas pelo usuário, etc.; o ganho de performance pode variar na faixa de 5 a 10 vezes, ou mais em alguns casos!</p>
<h3>Operações de Cursores</h3>
<p>Existem diversas operações que devem ser realizadas para que possamos usar um cursor. As operações incluem abrir o cursor, buscar linhas, fechar e desalocar o cursor, entre outras.</p>
<p>Primeiramente, é preciso declarar um cursor para que seja possível usá-lo. Usamos a seguinte sintaxe para realizar a declaração de um cursor no SQL Server:</p>
<pre><span style="color: #800080;"><strong>DECLARE <em>nome_cursor</em> CURSOR [opções]</strong></span>
<span style="color: #800080;"><strong>FOR <em>declaração_SELECT</em>;</strong></span></pre>
<p>Quando abrimos um cursor, a declaração SELECT criada para ele é executada, e o conjunto-resultado da consulta é armazenado em um local na memória do sistema.</p>
<p>Para abrir um cursor em SQL Server e preenchê-lo com dados usamos a seguinte sintaxe:</p>
<pre><span style="color: #800080;"><strong>OPEN nome_cursor</strong></span></pre>
<p>Para recuperar os dados contidos no resultado da consulta do cursor (já aberto), usamos a instrução <strong>FETCH</strong>, que irá buscar as linhas do resultado uma a uma, como segue:</p>
<pre><strong><span style="color: #800080;">FETCH direção FROM nome_cursor INTO lista_variáveis</span></strong></pre>
<p>Usamos um laço <strong>WHILE</strong> para iterar pelas linhas até que o cursor atinja o final do conjunto de dados.</p>
<p>A direção pode ser (dependendo do tipo de cursor) um dos métodos a seguir:</p>
<ul>
<li><strong>FIRST</strong> Busca apenas a primeira linha da tabela retornada ao cursor.</li>
<li><strong>LAST</strong> Busca apenas a última linha da tabela retornada ao cursor.</li>
<li><strong>NEXT</strong> Busca dados na direção &#8220;para frente&#8221;.</li>
<li><strong>PRIOR</strong> Busca dados na direção &#8220;para trás&#8221;</li>
<li><strong>ABSOLUTE</strong> n Busca exatamente a linha de número n</li>
<li><strong>RELATIVE</strong> n Busca os dados de forma incremental ou decremental.</li>
</ul>
<p>O mais comum é usar a direção <strong>NEXT</strong> (&#8220;próximo registro à frente&#8221;), como veremos no exemplo do cursor FORWARD ONLY.</p>
<p>Após terminar de processar todos os registros, o cursor deve ser fechado, de modo que não estará mais disponível para o programa que o executou. Para tal, basta usar a instrução <strong>CLOSE</strong>:</p>
<pre><strong><span style="color: #800080;">CLOSE nome_cursor</span></strong></pre>
<p>Após fechá-lo, é necessário liberar a memória que foi alocada a ele para armazenar os resultados de sua consulta. Isso é importante pois, em muitas implementações de bancos de dados, fechar um cursor não libera automaticamente a área de memória utilizada.</p>
<p>Para liberar a memória, devemos desalocá-la usando a operação DEALLOCATE, como segue:</p>
<pre><span style="color: #800080;"><strong>DEALLOCATE nome_cursor</strong></span></pre>
<p>Agora a memória está livre para ser usada por outros processos.</p>
<p>A ilustração abaixo mostra o fluxo das operações de cursor explicadas:</p>
<div id="attachment_16475" style="width: 430px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-16475" class="wp-image-16475 size-medium" title="Como funciona um cursor no SQL Server" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/03/funcionamento-cursor-sql-server-420x352.jpg" alt="Como funciona um cursor no SQL Server" width="420" height="352" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/03/funcionamento-cursor-sql-server-420x352.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/03/funcionamento-cursor-sql-server.jpg 686w" sizes="auto, (max-width: 420px) 100vw, 420px" /><p id="caption-attachment-16475" class="wp-caption-text">Sequência de operações em um cursor</p></div>
<h3>Funções de sistema</h3>
<p>Além dos comandos apresentados anteriormente, também usamos algumas funções de sistema para gerenciar cursores. As mais importantes são:</p>
<ul>
<li>Função <strong>@@CURSOR_ROWS</strong> &#8211; Retorna o número de linhas no cursor.</li>
<li>Função <strong>@@FETCH_STATUS</strong> &#8211; Reporta o estado do cursor após o último comando FETCH executado. Os estados são os seguintes:
<ul>
<li><strong>0</strong>: O último FETCH obteve uma linha com sucesso</li>
<li><strong>-1</strong>:O último FETCH falhou pois alcançar o final do conjunto de dados, ou falhou por outro motivo não especificado.</li>
<li><strong>-2</strong>: A última linha buscada não estava disponível &#8211; a linha foi excluída.</li>
</ul>
</li>
</ul>
<h3>Tipos de Cursores</h3>
<p>Existem alguns tipos básicos de cursores no SQL Server, tais como:</p>
<ul>
<li>Forward-Only (cursor padrão)</li>
<li>Estático</li>
<li>Keyset</li>
<li>Dinâmico</li>
</ul>
<p>Vamos explicar do que se tratam esses tipos de cursores, e ver um exemplo completo de uso do cursor <em><strong>Forward-Only</strong></em>, que é o mais comum.</p>
<h3>Cursor Forward-Only</h3>
<p>Neste tipo de cursor os dados somente podem ser buscados em uma direção. É possível realizar as operações padrão insert, update e delete nos dados.</p>
<p><strong>Exemplo</strong></p>
<pre>SET NOCOUNT ON;

DECLARE @idLivro SMALLINT, @nomeLivro VARCHAR(50), @mensagem VARCHAR(60);

PRINT '----Listagem de Livros----';

DECLARE cursor_livros CURSOR FORWARD_ONLY
FOR
SELECT ID_Livro, Nome_Livro FROM tbl_livros
ORDER BY ID_Livro;

OPEN cursor_livros

FETCH NEXT FROM cursor_livros <span style="color: #339966;">-- NEXT busca o próximo registro "á frente"</span>
INTO @idLivro,@nomeLivro

WHILE @@FETCH_STATUS = 0
BEGIN
 PRINT ' '
 SELECT @mensagem = '---Dados do livro ' + @nomeLivro + '---'
 PRINT @mensagem

 SELECT L.Nome_Livro Livro, L.Preco_Livro 'Preço', A.Nome_AUTOR + ' ' + A.SOBRENOME_Autor Autor, E.Nome_Editora Editora
 FROM tbl_livros L
  JOIN tbl_autores A
  ON L.ID_Autor = A.ID_Autor
  JOIN tbl_editoras E
  ON L.ID_editora = E.ID_Editora
 WHERE L.ID_Livro = @idLivro

 FETCH NEXT FROM cursor_livros
 INTO @idLivro,@nomeLivro

END
CLOSE cursor_livros;
DEALLOCATE cursor_livros;

<span style="color: #339966;">-- Comparar com consulta sem cursores:</span>
SELECT L.Nome_Livro Livro, L.Preco_Livro 'Preço', A.Nome_AUTOR + ' ' + A.SOBRENOME_Autor Autor, E.Nome_Editora Editora
FROM tbl_livros L
JOIN tbl_autores A
ON L.ID_Autor = A.ID_Autor
JOIN tbl_editoras E
ON L.ID_editora = E.ID_Editora;</pre>
<h3>Cursor Estático</h3>
<p>Algumas vezes precisamos nos mover para frente e para trás ao executar um cursor. Quando usamos um cursor estático, o conjunto de resultados não é alterado após o cursor ter sido aberto. Este tipo de cursor nos dá a opção de ser somente-leitura ou de permitir leitura e escrita de dados. Em um cursor somente-leitura, os dados não podem ser modificados &#8211; se você tentar modificá-los, não existe a garantia de que o cursor irá retornar esses dados alterados.</p>
<p>Ou seja, as operações update, insert e delete não modificam o conjunto de dados de um cursor estático, a menos, é claro, que o cursor seja fechado e reaberto após a realização dessas operações.</p>
<h3>Cursor Keyset</h3>
<p>Ao definir um novo cursor, pode ser que haja um conjunto de colunas que criam, em conjunto, uma entrada única. Caso seja possível identificar essas colunas, e se você precisar interagir com linhas que foram alteradas, usar esse tipo de cursor é uma opção interessante.</p>
<p>O &#8220;keyset&#8221; é um &#8220;conjunto de chaves&#8221; derivadas deste conjunto único de colunas &#8211; são identificadores únicos. Aqui, o cursor pode se mover para frente e para trás. É sensível a alterações na fonte de dados, e suporta as operações triviais de atualização e exclusão de dados.</p>
<h3>Cursor Dinâmico</h3>
<p>Um cursor dinâmico permite visualizar as alterações realizadas nos dados pelas operações insert, update e delete enquanto o cursor está aberto, sendo, desta forma, sensível a atualizações na fonte dos dados.</p>
<h3>Perguntas e Respostas</h3>
<ol>
<li><strong><em>É recomendável usar um cursor para realizar consultas em uma tabela?</em></strong><br />
No geral, não. Sempre que possível, tente escrever suas consultas ou outras declarações SQL utilizando técnicas que não envolvam a iteração linha a linha em um conjunto de dados.</li>
<li><em><strong>Quais os cinco comandos básicos requeridos para criar e usar um cursor no SQL Server?</strong></em><br />
Os comandos são: DECLARE, OPEN, FETCH, CLOSE e DEALLOCATE.</li>
<li><em><strong>Quais os tipos de cursores suportados pelo SQL Server?</strong></em><br />
O SQL Server suporta cursores dos tipos Forward-Only, Estático (Static), Dinâmico (Dynamic) e Keyset.</li>
</ol>
<h3>Referências</h3>
<ul>
<li>Nielsen, P.; White, M.; Parui, U. <em><strong>Microsoft SQL Server 2008 Bible</strong></em>. Editora Wiley</li>
<li>Plew, R. R.; Stephens, R. K. <em><strong>Aprenda em 24 horas SQL</strong></em>. Editora Campus. 2ª Edição.</li>
</ul>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/">Introdução aos Cursores no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Transações &#8211; COMMIT e ROLLBACK no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/transacoes-commit-e-rollback-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/transacoes-commit-e-rollback-no-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 02 Mar 2020 11:54:27 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16397</guid>

					<description><![CDATA[<p>COMMIT e ROLLBACK no SQL Server Neste artigo mostraremos como realizar as operações de commit e rollback em transações no SQL Server. Antes, vejamos uma breve explicação sobre esses termos. Transação Chamamos de Transação, em bancos de dados, a um conjunto de uma ou mais operações que constituem uma única tarefa ou unidade lógica de trabalho a ser processada. Os sistemas de bancos de dados devem garantir a execução correta das transações, mesmo que venham a ocorrer falhas; a transação deve executada por completo (incluindo todas as operações) ou então nenhuma de suas operações deve ser executada (a transação é abortada). A transação é a propagação de alterações para o banco de dados, como por exemplo a alteração ou exclusão de registros em uma tabela. Operações COMMIT e ROLLBACK Se um transação for concluída com sucesso (todas as operações bem-sucedidas), o banco de dados será alterado permanentemente, com os dados alterados persistidos (salvos em disco); essa operação é chamada de COMMIT. Porém, se houver falha em qualquer uma das operações que compõem a transação, o banco deverá ser retornado ao estado anterior ao início da transação; chamamos a essa operação de ROLLBACK. Assim, podemos caracterizar as transações da seguinte forma: [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/transacoes-commit-e-rollback-no-sql-server/">Transações &#8211; COMMIT e ROLLBACK no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>COMMIT e ROLLBACK no SQL Server</h2>
<p>Neste artigo mostraremos como realizar as operações de commit e rollback em transações no SQL Server. Antes, vejamos uma breve explicação sobre esses termos.</p>
<h3>Transação</h3>
<p>Chamamos de <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/conceitos-de-bancos-de-dados-o-que-e-uma-transacao/">Transação</a>, em bancos de dados, a um conjunto de uma ou mais operações que constituem uma única tarefa ou unidade lógica de trabalho a ser processada.</p>
<p>Os sistemas de bancos de dados devem garantir a execução correta das transações, mesmo que venham a ocorrer falhas; a transação deve executada por completo (incluindo todas as operações) ou então nenhuma de suas operações deve ser executada (a transação é abortada).</p>
<p>A transação é a propagação de alterações para o banco de dados, como por exemplo a alteração ou exclusão de registros em uma tabela.</p>
<h3>Operações COMMIT e ROLLBACK</h3>
<p>Se um transação for concluída com sucesso (todas as operações bem-sucedidas), o banco de dados será alterado permanentemente, com os dados alterados persistidos (salvos em disco); essa operação é chamada de <strong>COMMIT</strong>.</p>
<p>Porém, se houver falha em qualquer uma das operações que compõem a transação, o banco deverá ser retornado ao estado anterior ao início da transação; chamamos a essa operação de <strong>ROLLBACK</strong>.</p>
<p>Assim, podemos caracterizar as transações da seguinte forma:</p>
<ul>
<li>Todas as transações possuem início e fim</li>
<li>As transações podem ser salvas (consolidadas no banco de dados) ou desfeitas</li>
<li>Caso uma transação falhe no meio da execução de suas operações, nenhuma das operações será salva no banco de dados &#8211; todas serão desfeitas.&nbsp;</li>
</ul>
<p>No SQL Server, iniciamos uma transação com a declaração <strong>BEGIN TRANSACTION</strong>, e finalizamos o bloco que compõe a transação com as declarações <strong>COMMIT TRANSACTION</strong> ou <strong>ROLLBACK TRANSACTION</strong>, dependendo do estado que se deseja alcançar &#8211; salvar ou desfazer as operações, respectivamente.</p>
<p>Vamos a um exemplo.</p>
<h3>Exemplo</h3>
<p>No exemplo a seguir criamos uma tabela para testes de nome Livro_ISBN, com dados oriundos da tabela de livros que usamos em nosso curso de SQL Server. Logo após, experimentamos realizar duas transações: uma com rollback, desfazendo a transação, e outra com commit, confirmando a transação e alterando definitivamente os dados no banco.</p>
<p>Os comentários explicam o que acontece em cada exemplo:</p>
<pre><span style="color: #339966;"><strong>-- criar tabela para testes</strong></span>
<strong>SELECT Nome_Livro,ISBN</strong>
<strong>INTO Livro_ISBN</strong>
<strong>FROM tbl_livros;

</strong><span style="color: #339966;"><strong>-- transação com rollback</strong></span>
<strong>BEGIN TRANSACTION</strong>
<strong>  DELETE FROM Livro_ISBN <span style="color: #339966;">-- apaga todos registros da tabela, "sem querer"</span></strong>
<strong>  SELECT * FROM Livro_ISBN <span style="color: #339966;">-- mostra tabela vazia</span></strong>
<strong>ROLLBACK TRANSACTION; <span style="color: #339966;">-- desfaz a transação</span></strong>
<strong>SELECT * FROM Livro_ISBN; <span style="color: #339966;">-- mostra os dados normalmente

</span></strong><span style="color: #339966;"><strong>-- transação com commit</strong></span>
<strong>BEGIN TRANSACTION</strong>
<strong>  DELETE FROM Livro_ISBN <span style="color: #339966;">-- apaga todos registros da tabela</span></strong>
<strong>  SELECT * FROM Livro_ISBN <span style="color: #339966;">-- mostra tabela vazia</span></strong>
<strong>COMMIT TRANSACTION; <span style="color: #339966;">-- confirma a transação</span></strong>
<strong>SELECT * FROM Livro_ISBN; <span style="color: #339966;">-- agora mostra a tabela vazia em definitivo</span></strong></pre>
<p>Além de podermos trabalhar com commit e rollback, também é possível criarmos pontos de salvamento para as transações. Abordaremos os pontos de salvamento no SQL Server no próximo artigo sobre transações.</p>
<h3>Perguntas e Respostas</h3>
<ol>
<li><em><strong>Quais comandos podem ser controlados por transações no SQL Server?</strong></em><br />
Em transações colocamos os comandos DML, que causam alterações nos dados armazenados nas tabelas. São eles: insert, update e delete.</li>
<li><em><strong>Qual a diferença entre COMMIT e ROLLBACK?</strong></em><br />
COMMIT consolida a transação, ou seja, executa os comandos em definitivo. Já o ROLLBACK desfaz a transação inteira &#8211; nenhuma declaração SQL contida na transação é executada.</li>
</ol>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/transacoes-commit-e-rollback-no-sql-server/">Transações &#8211; COMMIT e ROLLBACK no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/transacoes-commit-e-rollback-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Cláusula BETWEEN e tipos de Hora no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/clausula-between-e-tipos-de-hora-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/clausula-between-e-tipos-de-hora-no-sql-server/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 28 Feb 2020 23:34:54 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16426</guid>

					<description><![CDATA[<p>Cláusula BETWEEN e tipos de Hora no SQL Server A cláusula BETWEEN nos permite retornar intervalos de dados especificados em um filtro na cláusula WHERE quando executarmos uma consulta SQL. Uma aplicação comum da cláusula BETWEEN é o retorno de registros de vendas contidos dentro de um intervalo de datas escolhido pelo usuário. Mas também é possível usar a cláusula BETWEEN para trabalhar com intervalos de hora, por exemplo com o tipo TIME. Exemplo Para nossos exemplos vamos criar uma tabela chamada tblAgenda, que conterá os campos ID, Compromisso e Hora, com os tipos SMALLINT, VARCHAR e TIME, respectivamente. Logo após, vamos inserir alguns registros de atividades em nossa agenda: CREATE TABLE tblAgenda ( ID SMALLINT PRIMARY KEY IDENTITY, Compromisso VARCHAR(60) NOT NULL, Hora TIME ); INSERT INTO tblAgenda (Compromisso, Hora) VALUES ('Acordar','05:00'), ('Academia','06:00'), ('Ir ao Trabalho','07:30'), ('Almoço com Cliente','12:40'), ('Reunião com Chefia','15:30'), ('Fim do Expediente','17:00'), ('Consulta com Dentista','17:30'), ('Cinema','19:00'), ('Jantar em Casa','21:15'), ('Assistir Netflix','22:00'), ('Hora de Dormir','23:30'); Vejamos os dados cadastrados na tabela de agenda: SELECT * FROM tblAgenda; Vamos agora realizar algumas consultas usando a cláusula BETWEEN para filtrar os dados de acordo com critérios de horário. Por exemplo, vamos retornar todos os dados dos compromissos agendados no [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/clausula-between-e-tipos-de-hora-no-sql-server/">Cláusula BETWEEN e tipos de Hora no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Cláusula BETWEEN e tipos de Hora no SQL Server</h2>
<p>A <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/20-t-sql-between-selecao-de-intervalos-em-registros-sql-server/">cláusula BETWEEN</a> nos permite retornar intervalos de dados especificados em um filtro na <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/13-t-sql-where-filtrando-registros-em-uma-consulta-sql-server/">cláusula WHERE</a> quando executarmos uma consulta SQL.</p>
<p>Uma aplicação comum da cláusula BETWEEN é o retorno de registros de vendas contidos dentro de um intervalo de datas escolhido pelo usuário. Mas também é possível usar a cláusula BETWEEN para trabalhar com intervalos de hora, por exemplo com o tipo TIME.</p>
<h3>Exemplo</h3>
<p>Para nossos exemplos vamos criar uma tabela chamada tblAgenda, que conterá os campos ID, Compromisso e Hora, com os tipos SMALLINT, VARCHAR e TIME, respectivamente. Logo após, vamos inserir alguns registros de atividades em nossa agenda:</p>
<pre><strong>CREATE TABLE tblAgenda (</strong>
<strong>  ID SMALLINT PRIMARY KEY IDENTITY,</strong>
<strong>  Compromisso VARCHAR(60) NOT NULL,</strong>
<strong>  Hora TIME</strong>
<strong>);

</strong><strong>INSERT INTO tblAgenda (Compromisso, Hora)</strong>
<strong>VALUES</strong>
<strong>('Acordar','05:00'),</strong>
<strong>('Academia','06:00'),</strong>
<strong>('Ir ao Trabalho','07:30'),</strong>
<strong>('Almoço com Cliente','12:40'),</strong>
<strong>('Reunião com Chefia','15:30'),</strong>
<strong>('Fim do Expediente','17:00'),</strong>
<strong>('Consulta com Dentista','17:30'),</strong>
<strong>('Cinema','19:00'),</strong>
<strong>('Jantar em Casa','21:15'),</strong>
<strong>('Assistir Netflix','22:00'),</strong>
<strong>('Hora de Dormir','23:30');</strong></pre>
<p>Vejamos os dados cadastrados na tabela de agenda:</p>
<pre><strong>SELECT * FROM tblAgenda;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16427 size-full" title="o tipo TIME no SQL Server" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/tipo-TIME-SQL-Server.jpg" alt="o tipo TIME no SQL Server" width="262" height="236"></p>
<p>Vamos agora realizar algumas consultas usando a cláusula BETWEEN para filtrar os dados de acordo com critérios de horário. Por exemplo, vamos retornar todos os dados dos compromissos agendados no intervalo entre 07:00 da manhã e 17:00, inclusive:</p>
<pre><strong>SELECT *</strong>
<strong>FROM tblAgenda</strong>
<strong>WHERE Hora BETWEEN '07:00' AND '17:00';</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16428 size-full" title="tipo TIME e cláusula BETWEEN no SQL Server" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/tipo-TIME-com-BETWEEN-SQL-Server.jpg" alt="tipo TIME e cláusula BETWEEN no SQL Server" width="247" height="107"></p>
<p>Outro exemplo: vamos verificar quais compromissos ainda temos no restante do dia. Para isso vamos passar o horário atual (são 15:28 agora aqui no escritório!) para a cláusula BETWEEN com a função <strong>GETDATE()</strong>:</p>
<pre><strong>SELECT *</strong>
<strong>FROM tblAgenda</strong>
<strong>WHERE Hora BETWEEN CONVERT(time, GETDATE()) AND '23:59';</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16432 size-full" title="Cláusula BETWEEN com GETDATE no SQL Server" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/tipo-TIME-GETDATE-BETWEEN-SQL-Server.jpg" alt="Cláusula BETWEEN com GETDATE no SQL Server" width="257" height="159"></p>
<h3>BETWEEN com tipo DATETIME</h3>
<p>E se o tipo for DATETIME em vez de TIME? Já vimos como trabalhar com a <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/20-t-sql-between-selecao-de-intervalos-em-registros-sql-server/">cláusula BETWEEN e datas com DATETIME</a> anteriormente. Mas, e se precisarmos incluir também a hora no filtro de intervalos?&nbsp;&nbsp;Neste caso teríamos a informação de data armazenada juntamente com o horário no dado deste tipo.</p>
<p>Suponhamos que me vez de usar o tipo TIME tivéssemos empregado o tipo DATETIME na nossa tabela de agenda, e que, desta forma, tivéssemos fornecido não apenas os horários dos compromissos, mas também suas respectivas datas.</p>
<p>Vamos apagar a tabela de agenda recriá-la com o tipo DATETIME no campo Hora, inserindo registros com data e hora dos compromissos:</p>
<pre><strong>DROP TABLE tblAgenda;

</strong><strong>CREATE TABLE tblAgenda (</strong>
<strong>ID SMALLINT PRIMARY KEY IDENTITY,</strong>
<strong>Compromisso VARCHAR(60) NOT NULL,</strong>
<strong>Hora DATETIME</strong>
<strong>);

</strong><strong>INSERT INTO tblAgenda (Compromisso, Hora)</strong>
<strong>VALUES</strong>
<strong>('Acordar','20200130 05:00'),</strong>
<strong>('Academia','20200130 06:00'),</strong>
<strong>('Ir ao Trabalho','20200130 07:30'),</strong>
<strong>('Almoço com Cliente','20200130 12:40'),</strong>
<strong>('Reunião com Chefia','20200130 15:30'),</strong>
<strong>('Fim do Expediente','20200130 17:00'),</strong>
<strong>('Consulta com Dentista','20200130 17:30'),</strong>
<strong>('Cinema','20200130 19:00'),</strong>
<strong>('Jantar em Casa','20200130 21:15'),</strong>
<strong>('Assistir Netflix','20200130 22:00'),</strong>
<strong>('Hora de Dormir','20200130 23:30'),</strong>
<strong>('Acordar','20200202 05:00'),</strong>
<strong>('Ir ao Trabalho','20200202 07:30'),</strong>
<strong>('Almoço com Cliente','20200202 12:30'),</strong>
<strong>('Reunião com Chefia','20200202 16:30'),</strong>
<strong>('Fim do Expediente','20200202 17:00'),</strong>
<strong>('Compras no Shopping','20200202 18:15'),</strong>
<strong>('Cinema','20200202 19:00'),</strong>
<strong>('Jantar no Restaurante','20200202 21:30'),</strong>
<strong>('Hora de Dormir','20200202 23:30');</strong></pre>
<p>Verificando os registros inseridos:</p>
<pre><strong>SELECT * FROM tblAgenda;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16466 size-full" title="Cláusula BETWEEN com DATETIME no SQL Server" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/between-datetime-sql-server.jpg" alt="Cláusula BETWEEN com DATETIME no SQL Server" width="337" height="405"></p>
<p>Vamos agora consultar os compromissos em um intervalo, digamos de 30/01/2020 às 20:00 até 02/02/2020 às 15:00, usando a seguinte sintaxe:</p>
<pre><strong>SELECT * FROM tblAgenda</strong>
<strong>WHERE Hora BETWEEN '20200130 22:00' AND '20200202 15:00';</strong></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16467 size-full" title="como usar between com datetime no SQL Server" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/between-datetime-sql-server-02.jpg" alt="como usar between com datetime no SQL Server" width="274" height="121"></p>
<p>É isso aí! Vimos nesta lição como trabalhar com data e hora como filtros da cláusula BETWEEN em consultas SQL.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/clausula-between-e-tipos-de-hora-no-sql-server/">Cláusula BETWEEN e tipos de Hora no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/clausula-between-e-tipos-de-hora-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mostrar numeração de linhas no SQL Server Management Studio</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/mostrar-numeracao-de-linhas-no-sql-server-management-studio/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/mostrar-numeracao-de-linhas-no-sql-server-management-studio/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 04 Feb 2020 14:45:32 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16288</guid>

					<description><![CDATA[<p>Como&#160;mostrar numeração de linhas no SQL Server Management Studio Às vezes é muito útil podermos visualizar a numeração das linhas em um script SQL quando trabalhamos no Microsoft no SQL Server Management Studio, por exemplo para encontrar erros específicos e tentar corrigi-los. Por padrão, a numeração de linhas nos scripts não é exibida, mas podemos ativar esse recurso de forma bem simples e rápida. É isso o que faremos com os procedimentos mostrados a seguir. Procedimentos A figura a seguir mostra um script carregado no Microsoft SQL Server Management Studio, sem a numeração das linhas: Vamos ativar a numeração de linhas para facilitar nosso trabalho no script. Para começar, clique no menu Ferramentas e logo após no item Opções&#8230;: Na caixa de diálogo aberta clique para expandir, no painel do lado esquerdo, o item Editor de Texto. Logo após, expanda também o sub-item Transact-SQL e então clique na opção&#160;Geral. No painel exibido do lado direito marque a opção &#8220;Números de Linha&#8220;, e clique em OK para ativar a numeração de linhas nos scripts e então fechar a caixa de diálogo: Agora podemos ver que uma nova coluna foi acrescentada e é exibida à esquerda na janela do script, contendo a [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/mostrar-numeracao-de-linhas-no-sql-server-management-studio/">Mostrar numeração de linhas no SQL Server Management Studio</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como&nbsp;mostrar numeração de linhas no SQL Server Management Studio</h2>
<p>Às vezes é muito útil podermos visualizar a numeração das linhas em um script SQL quando trabalhamos no Microsoft no SQL Server Management Studio, por exemplo para encontrar erros específicos e tentar corrigi-los.</p>
<p>Por padrão, a numeração de linhas nos scripts não é exibida, mas podemos ativar esse recurso de forma bem simples e rápida. É isso o que faremos com os procedimentos mostrados a seguir.</p>
<h3>Procedimentos</h3>
<p>A figura a seguir mostra um script carregado no Microsoft SQL Server Management Studio, sem a numeração das linhas:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16289" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-01.png" alt="Mostrar números de linhas no Microsoft SQL Server Management Studio" width="600" height="275" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-01.png 709w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-01-420x193.png 420w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>Vamos ativar a numeração de linhas para facilitar nosso trabalho no script. Para começar, clique no menu <strong>Ferramentas</strong> e logo após no item <strong>Opções&#8230;</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-16290" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-02.png" alt="números de linhas no SQl server" width="606" height="295" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-02.png 606w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-02-420x204.png 420w" sizes="auto, (max-width: 606px) 100vw, 606px" /></p>
<p>Na caixa de diálogo aberta clique para expandir, no painel do lado esquerdo, o item <strong>Editor de Texto</strong>. Logo após, expanda também o sub-item <strong>Transact-SQL</strong> e então clique na opção&nbsp;<strong>Geral</strong>.<br />
No painel exibido do lado direito marque a opção &#8220;<strong>Números de Linha</strong>&#8220;, e clique em <strong>OK</strong> para ativar a numeração de linhas nos scripts e então fechar a caixa de diálogo:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-16291" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-03.png" alt="numeração de linhas no SQL Server" width="635" height="289" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-03.png 635w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-03-420x191.png 420w" sizes="auto, (max-width: 635px) 100vw, 635px" /></p>
<p>Agora podemos ver que uma nova coluna foi acrescentada e é exibida à esquerda na janela do script, contendo a numeração das linhas:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16292" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-04.png" alt="linhas numeradas em scripts do sql server" width="601" height="281" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-04.png 762w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/02/mostrar-linhas-sql-server-04-420x196.png 420w" sizes="auto, (max-width: 601px) 100vw, 601px" /></p>
<p>É isso aí! Numeração de linhas ativada com sucesso no SSMS!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/mostrar-numeracao-de-linhas-no-sql-server-management-studio/">Mostrar numeração de linhas no SQL Server Management Studio</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/mostrar-numeracao-de-linhas-no-sql-server-management-studio/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
