Arquivo da categoria: SGBD Sql-Server

Exemplo de como criar uma consulta de ordenação aleatória no SQL Server

Aqui está um exemplo de como criar uma consulta de ordenação aleatória no SQL Server:

  • Usando o NEWID():
SELECT coluna1, coluna2, coluna3
FROM nome_da_tabela
ORDER BY NEWID()
  • Usando o CHECKSUM() com RAND():
SELECT coluna1, coluna2, coluna3
FROM nome_da_tabela
ORDER BY CHECKSUM(NEWID(), RAND(CHECKSUM(NEWID())))
  • Usando a função RAND():
SELECT coluna1, coluna2, coluna3
FROM nome_da_tabela
ORDER BY RAND(CHECKSUM(NEWID()))

Note que as consultas acima são apenas exemplos e que o nome da tabela e as colunas listadas devem ser substituídas pelos nomes reais da sua tabela e colunas.

Além disso, você pode limitar o número de resultados retornados usando a cláusula TOP ou usando uma consulta com paginação.

Deixe um comentário

Arquivado em Banco de Dados, DDL (data definition language), SGBD Sql-Server, SQL

SQL Server – Query para sugerir índice para melhorar consultas

SELECT
    sys.objects.name,
    (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) AS Impact,
    'CREATE NONCLUSTERED INDEX ix_IndexName ON ' + sys.objects.name COLLATE DATABASE_DEFAULT + ' ( ' + ISNULL(mid.equality_columns, '') + CASE
        WHEN mid.inequality_columns IS NULL THEN ''
        ELSE CASE
                WHEN mid.equality_columns IS NULL THEN ''
                ELSE ','
            END + mid.inequality_columns
    END + ' ) ' + CASE
        WHEN mid.included_columns IS NULL THEN ''
        ELSE 'INCLUDE (' + mid.included_columns + ')'
    END + ';' AS CreateIndexStatement,
    mid.equality_columns,
    mid.inequality_columns,
    mid.included_columns
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
    ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid
    ON mig.index_handle = mid.index_handle
    AND mid.database_id = DB_ID()
INNER JOIN sys.objects WITH (NOLOCK)
    ON mid.OBJECT_ID = sys.objects.OBJECT_ID
WHERE (
    migs.group_handle IN (
        SELECT TOP (500) group_handle
        FROM sys.dm_db_missing_index_group_stats WITH (NOLOCK)
        ORDER BY (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) DESC
    )
)
AND OBJECTPROPERTY(sys.objects.OBJECT_ID, 'isusertable') = 1
ORDER BY 2 DESC, 3 DESC

Referência: Prof. Victorino Vila. Alura, Curso Administração do Microsoft SQL Server 2014. Acessado em 2022-11-15. <https://cursos.alura.com.br/course/administracao-do-sql-server-2017/task/43422&gt;

Deixe um comentário

Arquivado em Banco de Dados, DML (data manipulation language), SGBD Sql-Server, SQL

SQLServer – Como gerar identificador único usando NEWID e uniqueidentifier

A função NEWID() cria um valor aleatório exclusivo do tipo uniqueidentifier.

Exemplo:

DECLARE @meuid uniqueidentifier  
SET @meuid = NEWID()  
PRINT 'Valor único: '+ CONVERT(varchar(16), @meuid) 

Saída

Valor único: 50545B27-B923-45ED-B09E-BB1338DE7F7D

Outro exemplo do uso do tipo uniqueidentifier:

select 
	id_qualquer, convert(uniqueidentifier,convert(varbinary(16),id_qualquer))
from 
	tabela

saída:
-8878500669700271003 AE3AC984-7264-6594-0000-000000000000
-8482444122934242414 034E488A-6719-9293-0000-000000000000
-8189670683937354121 E771588E-7B58-77CE-0000-000000000000
-7845259343039092842 310A2093-5787-9627-0000-000000000000

Obs. O mesmo id aplicado mais de uma vez gera o mesmo valor alfanumérico do tipo uniqueidentifier

Deixe um comentário

Arquivado em Banco de Dados, SGBD Sql-Server, SQL

SQL Server: Localizar qualquer comentário, texto, string em uso dentro do banco

Retorna o objeto no banco que usa a string procurada

Select Distinct
b.type, b.name
From sys.syscomments c
Inner Join sys.objects b On c.id = b.object_id
Where c.text Like '%Iniciando a importação%'
Order By 1, 2

Deixe um comentário

Arquivado em Banco de Dados, SGBD Sql-Server, SQL

SQL Server – Como resetar sequence no banco

–Retorna qual é o maior id na tabela

SELECT max(id_veiculo) FROM cad_veiculo

–Retorna qual é a ultima sequence gerada na tabela, neste exemplo tabela cad_veiculo

select ident_current('cad_veiculo')

–Defina a sequence para a sequencia + 1 ( veja retorno do max retornado acima)

DBCC CHECKIDENT (cad_veiculo, RESEED, 3551476)

Deixe um comentário

Arquivado em Banco de Dados, SGBD Sql-Server, SQL

SQL Server: Como visualizar conteúdo de triggers, procedures, views, funções, etc sem sp_helptext

No Sql server a procedure de sistema sp_helptext traz o conteúdo de triggers, procedures, views, funções, etc.

Uma alternativa ao uso do sp_helptext é a query abaixo:

	select definition 
	from sys.sql_modules
	where object_name(object_id) in ('VW_RELATORIO_A', 'VW_RELATORIO_B', 'SP_ATUALIZA_XX')

A vantagem no uso da query é que você pode usar IN e pesquisar vários object´s e por exemplo concatenar o comando GO para separar uma instrução da outra.

[]s

Deixe um comentário

Arquivado em Banco de Dados, SGBD Sql-Server, SQL

SQL Server – Função que limpa caracteres em HTML, CSS e ASCII do campo que desejar, no SQL

SQL Server – Função que limpa caracteres em HTML, CSS e ASCII do campo que desejar, no SQL. Contribuição/Créditos ao Andros Albert Cavalin

CREATE FUNCTION [dbo].[fncRemove_HTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
 
    DECLARE	@Start INT
    DECLARE	@End INT
    DECLARE	@Length INT
 
    -- Substitui a entidade HTML "&" pelo caracter ''
    SET @Start = CHARINDEX('&', @HTMLText)
    SET @End = @Start + 4
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
        SET @Start = CHARINDEX('&', @HTMLText)
        SET @End = @Start + 4
        SET @Length = (@End - @Start) + 1
    END
 
    -- Substitui a entidade HTML "<" pelo caracter '<'
    SET @Start = CHARINDEX('<', @HTMLText) SET @End = @Start + 3 SET @Length = (@End - @Start) + 1 WHILE (@Start > 0 AND @End > 0 AND @Length > 0) 
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '<')
        SET @Start = CHARINDEX('<', @HTMLText) SET @End = @Start + 3 SET @Length = (@End - @Start) + 1 END -- Substitui a entidade HTML ">" pelo caracter '>'
    SET @Start = CHARINDEX('>', @HTMLText)
    SET @End = @Start + 3
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '>')
        SET @Start = CHARINDEX('>', @HTMLText)
        SET @End = @Start + 3
        SET @Length = (@End - @Start) + 1
    END
 
    -- Substitui a entidade HTML "&&" pelo caracter ''
    SET @Start = CHARINDEX('&amp;', @HTMLText)
    SET @End = @Start + 4
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
        SET @Start = CHARINDEX('&amp;', @HTMLText)
        SET @End = @Start + 4
        SET @Length = (@End - @Start) + 1
    END
 
    -- Substitui a entidade HTML " " pelo caracter ' '
    SET @Start = CHARINDEX(' ', @HTMLText)
    SET @End = @Start + 5
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, ' ')
        SET @Start = CHARINDEX(' ', @HTMLText)
        SET @End = @Start + 5
        SET @Length = (@End - @Start) + 1
    END
 
    -- Substitui a tag por ''
    SET @Start = CHARINDEX('
', @HTMLText)
    SET @End = @Start + 3
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
        SET @Start = CHARINDEX('
', @HTMLText)
        SET @End = @Start + 3
        SET @Length = (@End - @Start) + 1
    END
 
 
    -- Substitui a tag por '')
    SET @Start = CHARINDEX('
', @HTMLText)
    SET @End = @Start + 4
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
        SET @Start = CHARINDEX('
', @HTMLText)
        SET @End = @Start + 4
        SET @Length = (@End - @Start) + 1
    END
 
    -- Substitui a tag 
 por ''
    SET @Start = CHARINDEX('
', @HTMLText)
    SET @End = @Start + 5
    SET @Length = (@End - @Start) + 1
 
    WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
        SET @Start = CHARINDEX('
', @HTMLText)
        SET @End = @Start + 5
        SET @Length = (@End - @Start) + 1
    END
 
 
    -- Remove os parâmetros contidos nas tags HTML
    SET @Start = CHARINDEX('<', @HTMLText) SET @End = CHARINDEX('>', @HTMLText, CHARINDEX('<', @HTMLText)) SET @Length = (@End - @Start) + 1 WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
    BEGIN
        SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
        SET @Start = CHARINDEX('<', @HTMLText) SET @End = CHARINDEX('>', @HTMLText, CHARINDEX('<', @HTMLText))
        SET @Length = (@End - @Start) + 1
    END

    
    SET @HTMLText = REPLACE(@HTMLText,'º','') -- º = ""
    SET @HTMLText = REPLACE(@HTMLText,''','') -- ' = ""
    SET @HTMLText = REPLACE(@HTMLText,'”','') -- ” = ""
    SET @HTMLText = REPLACE(@HTMLText,'"','') -- " = ""
    SET @HTMLText = REPLACE(@HTMLText,'–','') -- – = ""
    SET @HTMLText = REPLACE(@HTMLText,'§','') -- § = ""
    SET @HTMLText = REPLACE(@HTMLText,'·','') -- · = ""
    SET @HTMLText = REPLACE(@HTMLText,'“','') -- “ = ""
    
    SET @HTMLText = REPLACE(@HTMLText,'á','á') -- á = "á"
    SET @HTMLText = REPLACE(@HTMLText,'ã','ã') -- ã = "ã"
    SET @HTMLText = REPLACE(@HTMLText,'â','â') -- â = "â"
    SET @HTMLText = REPLACE(@HTMLText,'à','à') -- à = "à"
    SET @HTMLText = REPLACE(@HTMLText,'é','é') -- é = "é"
    SET @HTMLText = REPLACE(@HTMLText,'ê','ê') -- ê = "ê"
    SET @HTMLText = REPLACE(@HTMLText,'í','í') -- í = "í"
    SET @HTMLText = REPLACE(@HTMLText,'ó','ó') -- ó = "ó"
    SET @HTMLText = REPLACE(@HTMLText,'õ','õ') -- õ = "õ"
    SET @HTMLText = REPLACE(@HTMLText,'ô','ô') -- ô = "ô"
    SET @HTMLText = REPLACE(@HTMLText,'ú','ú') -- ú = "ú"
    SET @HTMLText = REPLACE(@HTMLText,'ç','ç') -- ç = "ç"
       
    RETURN LTRIM(RTRIM(@HTMLText))
END

Forma de uso:

SELECT [dbo].[fncRemove_HTML](campo_com_tags_html) as campo_sem_html FROM sua_tabela

Deixe um comentário

Arquivado em SGBD Sql-Server, SQL

Como copiar os dados de uma tabela sem precisar criar nova tabela via “create table” apenas com select e insert

Segue uma forma simples e prática via sql de copiar os dados de uma tabela sem precisar criar nova tabela via “create table” apenas com select e insert

select * into TABELA_BACKUP from TABELA_A_SER_COPIADA

O resultado será uma tabela clonada com os dados da tabela original

OBS. apesar da cópia da estrutura da tabela, coisas do tipo identity, sequence, trigger precisa ser re-criados na nova tabela.

É suportado pelo SQL Server desde a versão 2005 https://msdn.microsoft.com/en-us/library/ms188029(SQL.90).aspx

1 comentário

Arquivado em Banco de dados, SGBD Sql-Server, SQL

SQLServer – função para converter string hexadecimal padrão UTF8 para Unicode legível

Certa vez recebemos um demanda para analisar uns dados exportados do AD da empresa (csv) e percebemos que todos os atributos com acentuação exportados estava em hexadecimal padrão UTF8 e precisávamos decodificar o hexadecimal para o padrão Unicode em uma string legível. Por exemplo, coisas do tipo “X’43414d504f204d4f5552c3834f’” passariam a significam “CAMPO MOURÃO”.

A tabela de conversão que ajudou bastante nas conversões foi http://www.utf8-chartable.de/

Depois de queimar um pouco de fosfato para entender o padrões de conversão de um lado para o outro bolamos seguinte a function o SQLServer para resolver o problema:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fn_hexutf8_to_unicode](@valorIN VARCHAR(3000))
RETURNS VARCHAR(3000)
AS

BEGIN

DECLARE @retorno VARCHAR(3000);
DECLARE @valor VARCHAR(3000);
DECLARE @utf varchar(20);
DECLARE @unicode varchar(20);

SET @valor = replace(replace(@valorIN, 'X''', '0x'), '''', '');
SET @valor = REPLACE(@valor, 'c383', '#');
SET @valor = REPLACE(@valor, 'e28093', '96');
SET @valor = REPLACE(@valor, 'c2ba', 'ba');


WHILE CHARINDEX('c3', @valor)<>0
BEGIN
	set @utf = SUBSTRING(@valor, CHARINDEX('c3', @valor), 4);
	set @unicode = RIGHT(CONVERT(varchar(max),CONVERT(VARBINARY(MAX),CONVERT(VARBINARY(MAX), '0x'+RIGHT(@utf, 2), 1)+64,1),1), 2);
	SET @valor = REPLACE(@valor, @utf, @unicode);
END
SET @valor = REPLACE(@valor, '#', 'c3');
SET @valor = CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), @valor, 1));

SET @retorno = @valor;


RETURN @retorno;
END;

Forma de uso:

select dbo.fn_hexutf8_to_unicode('X''43414d504f204d4f5552c3834f')

Espero que tenha sido útil, pois passamos um dia emocionante pra chegar neste resultado rs.

Deixe um comentário

Arquivado em SGBD Sql-Server, SQL

SQL SERVER: desabilitar e habilitar campo IDENTITY

É comum fazer aquela migração marota de registros entre bases, ai surge a necessidade de migrar tabelas com identity (auto incremento) com a mesma estrutura de Id´s.
O Sql Server permite desligar e ligar o campo identity numa boa 🙂

Exemplo:

--DESATIVAR IDENTITY TABELA
SET IDENTITY_INSERT SUA_TABELA ON
--INSERE SEU ID PSICODÉLICO
insert into SUA_TABELA(ID, CONTEUDO) VALUES (666, 'APOCALIPSE')
insert into SUA_TABELA(ID, CONTEUDO) VALUES (171, 'RÁÁÁÁ, PEGADINHA DO MALANDRO!!! GLU GLU YEAH YEAH')
--ATIVAR IDENTITY TABELA
SET IDENTITY_INSERT SUA_TABELA OFF

Bom é isto.
flw

7 Comentários

Arquivado em Banco de Dados, SGBD Sql-Server, SQL