Arquivo

Archive for the ‘SQL Server’ Category

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 2014 SP1 – Update 6

2 de junho de 2016 Deixe um comentário

Fim do suporte ao SQL Server 2005

12 de abril de 2016 Deixe um comentário

Hoje, 12/04/2016, acaba o suporte ao SQL Server 2005. É recomendado atualizar para o SQL Server 2014, SQL Azure (ferramenta de migração) ou aguardar para SQL Server 2016 que já está para ser lançado.

Vale lembrar que não é apenas atualizar o SQL Server, para isso precisamos também fazer o upgrade de hardware, sem falar na compatibilidade das aplicações com o novo SQL Server escolhido.

sql-2005-end-of-support

Extended support for SQL Server 2005 ends on April 12, 2016