Arquivo

Posts Tagged ‘SQL’

SQL Server – Gerar um número randômico

13 de setembro de 2017 Deixe um comentário

Preciso gerar um volume de dados com valor inteiro e/ou decimal, para popular uma tabela no SQL Server. Não quero depender de ferramenta de terceiro para gerar os dados.

A solução foi fazer um script Gerar_Numero_Randomico.sql, que está disponível no meu GitHub.

Gera_NrRandomicoResult

Explicação dos comandos usados, abaixo:

1. Gerar um número randômico, ou seja, número aleatório. Exemplo: 1, 524, 6421, 60544, 40.

Para isso usarei a função NEWID() que cria um valor hexadecinal único do tipo uniqueidentifier.

SELECT NEWID() AS ID_Hex

 

2. Extrair o valor inteiro do ID_Hex, usando a função CHECKSUM().

SELECT

  A.ID_Hex,

  CHECKSUM(A.ID_Hex) AS Nr_Randomico,
FROM ( — Nr_Randomico baseado em um ID Hexadecimal
            SELECT NEWID() AS ID_Hex
          ) A

 

3. Criar o valor decimal, com 4 casas, dividindo o valor inteiro por 10000,0000 e convertendo o resultado da divisão usando a função CAST().

SELECT

  A.ID_Hex,

  CHECKSUM(A.ID_Hex) AS Nr_Randomico,

  CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)) AS Nr_Randomico_Decimal
FROM ( — Nr_Randomico baseado em um ID Hexadecimal
            SELECT NEWID() AS ID_Hex
          ) A

 

Com os três passos, obtemos o seguinte resultado:

ID_Hex Nr_Randomico Nr_Randomico_Decimal
4CBFDEC3-F57C-433D-B145-7959B570FBC0 -1216800284 -121680.0284

 

Podemos gerar novos valores inteiros e decimais, usando parte do Nr_Randomico_Decimal. Exemplo:

Nr_Randomico_Decimal Novos Valores Descrição do Valor
-121680.0284 -121680 Somente parte inteira
-121680.0284 0284 Somente parte decimal
-121680.0284 0.0284 1 dígito da parte inteira + parte decimal
-121680.0284 80.0284 2 dígitos da parte inteira + parte decimal
-121680.0284 680.0284 3 dígitos da parte inteira + parte decimal
-121680.0284 1680.0284 4 dígitos da parte inteira + parte decimal

 

4. Usarei a função PARSENAME() para obter a parte inteira do Nr_Randomico_Decimal.

PARSENAME(CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)) , 2) AS Parte_Inteiro

 

5. Usarei a função PARSENAME() para obter a parte decimal do Nr_Randomico_Decimal.

PARSENAME(CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)) , 1) AS Parte_Decimal

Note que a função PARSENAME() é composta por dois parâmetros o Objeto e Parte do Objeto que se deseja obter, sintaxe PARSENAME ( ‘object_name’ , object_piece ).

Como nosso objeto é o Número Decimal  -121680.0284, ele é composto por 2 partes interpretadas da direita para esquerda. Portanto:

Objeto Parte Resultado Descrição
-121680.0284 1 0284 Parte Decimal do Nr_Randomico_Decimal
-121680.0284 2 -121680 Parte Inteira do Nr_Randomico_Decimal

6. Já com a Parte Inteira, -121680, preciso extrair o 1 dígito, 2 digito, etc.

Para isso usarei a função RIGHT(), obtendo N caracteres da direita para esquerda.

Parte Inteira Resultado Sintaxe
-121680 0 RIGHT(‘-121680’, 1)
-121680 80 RIGHT(‘-121680’, 2)
-121680 680 RIGHT(‘-121680’, 3)
-121680 1680 RIGHT(‘-121680’, 4)

RIGHT(PARSENAME(CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)), 2), 1) AS Parte_Inteiro_1dig

7. Agora vamos somar a Parte Inteira N Digitos + Parte Decimal

Nr_Randomico_Decimal Inteira N Digitos Parte Decimal Novos Valores
-121680.0284 0 0284 0.0284
-121680.0284 80 0284 80.0284
-121680.0284 680 0284 680.0284
-121680.0284 1680 0284 1680.0284

 

8. Como repetir o comando SQL, várias vezes?

Até o passo sete, foi construído o comando SELECT… que retorna um número aleatório/rondômico.

Porém, precisamos executar o comando SELECT várias vezes e ir armazenando em uma tabela.

Para executar um comando N vezes, usarei o GO que é uma instrução sqlcmd, exemplo:

SELECT ‘A’, 1

GO 5

Será executado 5 vezes o comando SELECT ‘A’, 1

Dito isto, para gerar 5 números randômicos vamos colocar no final do comando SELECT, GO 5

SELECT

  A.ID_Hex,

……

GO 5

9. Criar uma Tabela para armazenar os 5 números gerados no passo oito.

No passo anterior, vimos que o comando SELECT foi executado 5 vezes. Isso gerou 5 resultados em resultset diferentes e não uma tabela contendo 5 registros.

Para resolver isso, podemos criar uma Tabela para receber os valores gerados.

Normalmente, usamos a função CREATE TABLE().

Mas, neste exemplo não quero definir cada campo ao criar a tabela de resultado e sim aproveitar o resultado do SELEC para criar a estruturar da #Tabela_NrRandomico que receberá os números randômicos gerados.

Para isso usarei a função TOP() em conjunto com a cláusula INTO do SELECT.

SELECT TOP 0, *

INTO #Tabela_NrRandomico

FROM (

SELECT

  A.ID_Hex,

……

) Gerar_NrRandomico

No comando acima o TOP 0 (zero), * do PRIMEIRO SELECT não retorna nenhum valor, porém captura toda estrutura de campos do resultado gerado pelo SEGUNDO SELECT A.ID_HEX.

Já o INTO #Tabela_NrRandomico do PRIMEIRO SELECT, cria a tabela #Tabela_NrRandomico baseado no resultado capturado.

Atenção o # não é erro de digitação, ele significa que será criar uma tabela temporária que ao fechar a conexão com o banco de dados é eliminada, automaticamente.

Para criar uma tabela real, portanto permanente. Retire o #, INTO Tabela_NrRandomico.

 

10. Inserir na tabela #Tabela_NrRandomico os 5 números gerados no passo oito.

Para isso usarei o INSERT INTO com valores gerados no SELECT

INSERT INTO #Tabela_NrRandomico
SELECT *
FROM (

SELECT

  A.ID_Hex,

……

) Gerar_NrRandomico

GO 5

11. Vamos exibir o resultado da #Tabela_NrRandomico

SELECT * FROM #Tabela_NrRandomico
GO

12. Excluir a tabela #Tabela_NrRandomico, usando o DROP TABLE.

Para que ao executar o script várias vezes não exiba o erro de tabela já existente, pois ela é sempre criada no passo nove.

DROP TABLE #Tabela_NrRandomico
GO

Com os 12 passos, obtemos o seguinte resultado:

ID_Hex Nr_Randomico Nr_Randomico_Decimal
4CBFDEC3-F57C-433D-B145-7959B570FBC0 -1216800284 -121680.0284
0509C7E0-AEC0-4B6C-8DDF-A26142156E59 -1025729740 -102572.9740
539E79E8-12CC-45AE-9E38-2CBECE009464 718090630 71809.0630
38268135-CDCC-43B0-B8D2-68C67C3D0D14 -2028602481 -202860.2481
C0743028-43C9-43BE-93AC-5C39455BEA5C 779214164 77921.4164

… mais outras colunas com os novos valores Inteiro_1_Decimal, Inteiro_N_Decimal.

 

Fonte:

https://stackoverflow.com/questions/3418606/sql-how-do-i-get-only-the-numbers-after-the-decimal

https://stackoverflow.com/questions/16412231/how-to-get-2-digits-after-decimal-point-in-tsql

https://stackoverflow.com/questions/1045138/how-do-i-generate-random-number-for-each-row-in-a-tsql-select

Converter e/ou Formatar no Microsoft SQL Server

30 de maio de 2017 Deixe um comentário

Tenho um campo do tipo SmallDateTime contendo 2017-05-30 16:16:10.730.

Desejo os seguintes resultados:

GetDate yyyymmdd yyyy-mm-dd dd/mm/yyyy
2017-05-30 16:16:10.730 20170530 2017-05-30 30/05/2017

 

Solução:

Para resolver este problema usei a função CONVERT passando o parâmetro style, ele será o responsável por apresentar o resultado da conversão com um formato de exibição.

Cada código do style indica um formato, mais informações na documentação T-SQL.

 

Syntax for CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

Comando:

select getdate() AS ‘GetDate’

     , convert(varchar(10), getdate(), 112)  AS DateFormat_ISO_Long
     , convert(varchar(10), getdate(), 126)  AS DateFormat_ISO8601_Long
     , convert(varchar(10), getdate(), 103) AS DateFormat_British_French_Long

 


Desejo a Data e Hora SEM espacos

GetDate yyyy-mm-ddThh:mm:ss.mmmZ
2017-05-30 16:16:10.730 2017-05-30T16:16:10.730

 

Solução:

select getdate() AS ‘GetDate’
    
     , convert(varchar(19), getdate(), 126)  AS DateFormat_ISO8601_Long — (no spaces)


Desejo a Hora com formados diferentes

GetDate hh:mm hh:mm:ss hh:mm:ss.mmm
2017-05-30 16:16:10.730 16:16 16:16:10 16:16:10.730

 

Solução:

select getdate() AS ‘GetDate’

     
     , convert(varchar(5), getdate(), 114) AS HoraMinuto
     , convert(varchar(8), getdate(), 114) AS HoraMinutoSegundo
     , convert(varchar(12), getdate(), 114) AS HoraMinutoSegundoMilisegundo

SQL Server Configuration Manager

9 de dezembro de 2016 Deixe um comentário

Após instalar o SQL Server não encontro SQL Server Configuration Manager.

SQLServerConfigurationManager

Ele não aparece como um aplicativo nas versões mais recentes do Windows.

SQLServerConfigurationManagerPesquisa

Solução:

1. Criar um atalho de C:\Windows\SysWOW64\SQLServerManager13.msc

Versão Arquivo MSC
SQL 2016 C:\Windows\SysWOW64\SQLServerManager13.msc
SQL 2014 C:\Windows\SysWOW64\SQLServerManager12.msc
SQL 2012 C:\Windows\SysWOW64\SQLServerManager11.msc
SQL 2008 C:\Windows\SysWOW64\SQLServerManager10.msc

SQLServerConfigurationManagerPesquisaAtalho

 

2. Renomear o atalho para SQL Server Configuration Manager e fixar no Iniciar

SQLServerConfigurationManagerPesquisaPin

3. Abrir no Iniciar

SQLServerConfigurationManagerPesquisaStart

 

Fonte: https://msdn.microsoft.com/pt-br/library/ms174212.aspx

SQL Server 2016 SP1

17 de novembro de 2016 Deixe um comentário

SQL Server Management Studio (SSMS) Free – Nova Versão 16.5

14 de novembro de 2016 Deixe um comentário

Esta versão do SSMS disponível é gratuita e não requer uma licença do SQL Server para instalação e uso.

 

O SSMS (SQL Server Management Studio) é um ambiente integrado para acessar, configurar, gerenciar, administrar e desenvolver todos os componentes do SQL Server. O SSMS combina um amplo grupo de ferramentas gráficas com vários editores de script avançados para fornecer acesso ao SQL Server para desenvolvedores e administradores de todos os níveis de conhecimento. Esta versão conta com compatibilidade aprimorada com versões anteriores do SQL Server, um instalador da Web independente e notificações do sistema no SSMS quando novas versões estiverem disponíveis.

 

Versões do SSMS não localizadas para o inglês exigem o pacote de atualização de segurança da base de dados 2862966 se a instalação for realizada em: Windows 8, Windows 7, Windows Server 2012 e Windows Server 2008 R2.

image

download Baixar o SQL Server Management Studio (SSMS)

Baixar o SQL Server Management Studio (16.5)

Esta versão do SSMS pode ser instalada nos seguintes idiomas:
Chinês (República Popular da China) | Chinês (Taiwan) | Inglês (Estados Unidos) | Francês
Alemão | Italiano | Japonês | Coreano | Português (Brasil) | Russo | Espanhol

 

Fonte: Baixar o SQL Server Management Studio (SSMS)

SQL Server 2016 – Download

22 de julho de 2016 Deixe um comentário

Download oficial do SQL Server 2016

  1. Enterprise = Versão paga com todos recursos
  2. Standard = Versão paga sem alguns recursos, que são exclusivos da Enterprise
  3. Express = Versão grátis com algumas limitações
  4. Developer = Versão grátis com todos recursos é igual a Enterprise, porém não pode ser usada em produção. Como próprio nome diz somete para Desenvolvimento, Teste e Demonstração de Aplicação.

Comparar de versões do SQL ( 2016, 2014, 2012, 2008 R2 )

Antes de instalar SQL 2016 é obrigatório instalar o Visual Studio VC++ 2013 Runtime Libraries KB316398.

 

“De acordo com um estudo divulgado pelo IDC, no período de 2015, os investimentos de BI e Analytics foram estimados em 788 milhões de dólares, só em território nacional. E para que você consiga e transformar os dados extraídos em informação de valor para o negócio, a Microsoft disponibiliza a versão mais nova da plataforma de dados SQL Server. A versão, chamada de SQL Server 2016 é a mais completa do mercado, oferecendo, inclusive, análises avançadas 100 vezes mais rápidas.” #pensandogrande

 

SQL Server no Linux!

8 de março de 2016 Deixe um comentário

A Microsoft divulgou ontem, 07/03/2016, o SQL Server para Linux!

sql-loves-linux_2_twitter-002-640x358

Extending SQL Server to Also Now Run on Linux

Today I’m excited to announce our plans to bring SQL Server to Linux as well. This will enable SQL Server to deliver a consistent data platform across Windows Server and Linux, as well as on-premises and cloud. We are bringing the core relational database capabilities to preview today, and are targeting availability in mid-2017.”

Posted March 7, 2016March 7, 2016 By

Faça sua inscrição para receber mais informações sobre SQL Server no Linux.

Participe da comunidade.