AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 237684
Accepted
Joe Obbish
Joe Obbish
Asked: 2019-05-09 13:01:06 +0800 CST2019-05-09 13:01:06 +0800 CST 2019-05-09 13:01:06 +0800 CST

Qual é a maneira mais rápida de converter muitos inteiros anuláveis ​​1:1 em uma string binária?

  • 772

Parte da minha carga de trabalho usa uma função CLR que implementa o algoritmo de hash assustador para comparar linhas para ver se algum valor de coluna foi alterado. A função CLR usa uma string binária como entrada, então preciso de uma maneira rápida de converter linhas em uma string binária. Espero fazer hash de cerca de 10 bilhões de linhas durante a carga de trabalho completa, então gostaria que esse código fosse o mais rápido possível.

Tenho cerca de 300 tabelas com esquemas diferentes. Para os propósitos desta questão, suponha uma estrutura de tabela simples de 32 INTcolunas anuláveis. Forneci dados de exemplo, bem como uma maneira de comparar os resultados na parte inferior desta pergunta.

As linhas devem ser convertidas na mesma string binária se todos os valores das colunas forem iguais. As linhas devem ser convertidas em strings binárias diferentes se algum valor de coluna for diferente. Por exemplo, código tão simples quanto o seguinte não funcionará:

CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + ..

Ele não manipula NULLs corretamente. Se COL1for NULL para a linha 1 e COL2for NULL para a linha 2, ambas as linhas serão convertidas em uma string NULL. Acredito que o tratamento correto de NULLs é a parte mais difícil de converter a linha inteira corretamente. Todos os valores permitidos para as colunas INT são possíveis.

Para antecipar algumas perguntas:

  • Se for importante, na maioria das vezes (90%+) as colunas não serão NULL.
  • Eu tenho que usar o CLR.
  • Eu tenho que hash tantas linhas. Não consigo persistir os hashes.
  • Acredito que não posso usar o modo batch para a conversão devido à presença da função CLR.

Qual é a maneira mais rápida de converter 32 INTcolunas anuláveis ​​em uma string BINARY(X)ou ?VARBINARY(X)

Dados de amostra e código conforme prometido:

-- create sample data
DROP TABLE IF EXISTS dbo.TABLE_OF_32_INTS;

CREATE TABLE dbo.TABLE_OF_32_INTS (
    COL1 INT NULL,
    COL2 INT NULL,
    COL3 INT NULL,
    COL4 INT NULL,
    COL5 INT NULL,
    COL6 INT NULL,
    COL7 INT NULL,
    COL8 INT NULL,
    COL9 INT NULL,
    COL10 INT NULL,
    COL11 INT NULL,
    COL12 INT NULL,
    COL13 INT NULL,
    COL14 INT NULL,
    COL15 INT NULL,
    COL16 INT NULL,
    COL17 INT NULL,
    COL18 INT NULL,
    COL19 INT NULL,
    COL20 INT NULL,
    COL21 INT NULL,
    COL22 INT NULL,
    COL23 INT NULL,
    COL24 INT NULL,
    COL25 INT NULL,
    COL26 INT NULL,
    COL27 INT NULL,
    COL28 INT NULL,
    COL29 INT NULL,
    COL30 INT NULL,
    COL31 INT NULL,
    COL32 INT NULL
);

INSERT INTO dbo.TABLE_OF_32_INTS WITH (TABLOCK)
SELECT 0, 123, 12345, 1234567, 123456789
, 0, 123, 12345, 1234567, 123456789
, 0, 123, 12345, 1234567, 123456789
, 0, 123, 12345, 1234567, 123456789
, 0, 123, 12345, 1234567, 123456789
, 0, 123, 12345, 1234567, 123456789
, NULL, -876545321
FROM
(
    SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
    FROM master..spt_values t1
    CROSS JOIN master..spt_values t2
) q
OPTION (MAXDOP 1);


GO


-- procedure to test performance
CREATE OR ALTER PROCEDURE #p AS 
BEGIN

SET NOCOUNT ON;

DECLARE
@counter INT = 0,
@dummy VARBINARY(8000);

WHILE @counter < 10
BEGIN
    SELECT @dummy = -- this code is clearly incomplete as it does not handle NULLs
        CAST(COL1 AS BINARY(4)) + 
        CAST(COL2 AS BINARY(4)) + 
        CAST(COL3 AS BINARY(4)) + 
        CAST(COL4 AS BINARY(4)) + 
        CAST(COL5 AS BINARY(4)) + 
        CAST(COL6 AS BINARY(4)) + 
        CAST(COL7 AS BINARY(4)) + 
        CAST(COL8 AS BINARY(4)) + 
        CAST(COL9 AS BINARY(4)) + 
        CAST(COL10 AS BINARY(4)) + 
        CAST(COL11 AS BINARY(4)) + 
        CAST(COL12 AS BINARY(4)) + 
        CAST(COL13 AS BINARY(4)) + 
        CAST(COL14 AS BINARY(4)) + 
        CAST(COL15 AS BINARY(4)) + 
        CAST(COL16 AS BINARY(4)) + 
        CAST(COL17 AS BINARY(4)) + 
        CAST(COL18 AS BINARY(4)) + 
        CAST(COL19 AS BINARY(4)) + 
        CAST(COL20 AS BINARY(4)) + 
        CAST(COL21 AS BINARY(4)) + 
        CAST(COL22 AS BINARY(4)) + 
        CAST(COL23 AS BINARY(4)) + 
        CAST(COL24 AS BINARY(4)) + 
        CAST(COL25 AS BINARY(4)) + 
        CAST(COL26 AS BINARY(4)) + 
        CAST(COL27 AS BINARY(4)) + 
        CAST(COL28 AS BINARY(4)) + 
        CAST(COL29 AS BINARY(4)) + 
        CAST(COL30 AS BINARY(4)) + 
        CAST(COL31 AS BINARY(4)) + 
        CAST(COL32 AS BINARY(4))
    FROM dbo.TABLE_OF_32_INTS
    OPTION (MAXDOP 1);

    SET @counter = @counter + 1;
END;

SELECT cpu_time
FROM sys.dm_exec_requests
WHERE session_id = @@SPID;

END;

GO

-- run procedure
EXEC #p;

(Ainda estarei usando o hash assustador neste resultado binário. A carga de trabalho usa junções de hash e o valor de hash é usado para uma das compilações de hash. Não quero um valor binário longo na compilação de hash porque requer muito memória.)

sql-server sql-server-2017
  • 5 5 respostas
  • 379 Views

5 respostas

  • Voted
  1. Paul White
    2019-05-12T10:16:11+08:002019-05-12T10:16:11+08:00

    Na minha máquina (SQL Server 2017), a seguinte função C# SQLCLR é executada cerca de 30% mais rápido que a binary(5)ideia, 35% mais rápido que CONCAT_WSe na metade do tempo de resposta automática.

    Requer UNSAFEpermissão e usa ponteiros. A implementação está muito especificamente ligada aos dados de teste.

    Para fins de teste, a maneira mais fácil de fazer esse assembly inseguro funcionar é definir o banco de dados TRUSTWORTHYe desabilitar a opção de configuração de segurança clr strict, se necessário.

    Código compilado

    Por conveniência, os CREATE ASSEMBLYbits compilados estão em https://gist.github.com/SQLKiwi/72d01b661c74485900e7ebcfdc63ab8e

    Esboço de Função T-SQL

    CREATE FUNCTION dbo.NullableIntsToBinary
    (
        @Col01 int, @Col02 int, @Col03 int, @Col04 int, @Col05 int, @Col06 int, @Col07 int, @Col08 int, 
        @Col09 int, @Col10 int, @Col11 int, @Col12 int, @Col13 int, @Col14 int, @Col15 int, @Col16 int, 
        @Col17 int, @Col18 int, @Col19 int, @Col20 int, @Col21 int, @Col22 int, @Col23 int, @Col24 int, 
        @Col25 int, @Col26 int, @Col27 int, @Col28 int, @Col29 int, @Col30 int, @Col31 int, @Col32 int
    )
    RETURNS binary(132) 
    WITH EXECUTE AS CALLER
    AS EXTERNAL NAME Obbish.UserDefinedFunctions.NullableIntsToBinary;
    

    Código fonte

    A fonte C# está em https://gist.github.com/SQLKiwi/64f320fe7fd802a68a3a644aa8b8af9f

    Se você compilar isso por conta própria, deverá usar uma biblioteca de classes (.dll) como o tipo de projeto de destino e marcar a opção de compilação Permitir código não seguro.

    Solução combinada

    Since you ultimately want to compute the SpookyHash of the binary data returned above, you can call SpookyHash within the CLR function and return the 16-byte hash.

    An example implementation based on a table with a mixture of column data types is at https://gist.github.com/SQLKiwi/6f82582a4ad1920c372fac118ec82460. This includes an unsafe inlined version of the Spooky Hash algorithm derived from Jon Hanna's SpookilySharp and the original public domain C source code by Bob Jenkins.

    • 11
  2. Joe Obbish
    2019-05-09T16:26:48+08:002019-05-09T16:26:48+08:00

    Uma INTcoluna tem quatro bytes de valores permitidos que correspondem exatamente ao tamanho de um BINARY(4). Em outras palavras, cada valor possível de um BINARY(4) corresponde a um valor possível de uma INTcoluna. Portanto, a menos que haja um valor que não seja permitido na INTcoluna, não há substituto seguro para um NULL. Se uma coluna é NULL ou não, deve ser codificado separadamente. Ele simplesmente não pode caber dentro de um arquivo BINARY(4).

    Uma maneira de fazer isso é com um bitmap NULL. Considere o seguinte código:

    CAST(       
        CASE WHEN COL1 IS NOT NULL THEN 0 ELSE 1 END | 
        CASE WHEN COL2 IS NOT NULL THEN 0 ELSE 2 END | 
        CASE WHEN COL3 IS NOT NULL THEN 0 ELSE 4 END | 
        CASE WHEN COL4 IS NOT NULL THEN 0 ELSE 8 END | 
        CASE WHEN COL5 IS NOT NULL THEN 0 ELSE 16 END | 
        CASE WHEN COL6 IS NOT NULL THEN 0 ELSE 32 END | 
        CASE WHEN COL7 IS NOT NULL THEN 0 ELSE 64 END | 
        CASE WHEN COL8 IS NOT NULL THEN 0 ELSE 128 END
    AS BINARY(1))
    

    Se oito colunas são ou não NULL cabe em um único byte. Essas expressões podem ser comparadas entre as linhas para verificar se todas as mesmas colunas são NULL ou não NULL. Com essas informações adicionais, torna-se seguro substituir um valor de coluna NULL por qualquer coisa que não seja NULL. Achei CAST(ISNULL(COL1, 0) AS BINARY(4))o mais rápido, embora outras variações ISNULL(CAST(COL1 AS VARBINARY(4)), 0x)sejam possíveis.

    É difícil provar algo definitivamente, mas achei os seguintes detalhes os mais rápidos:

    • Usando 0 para NOT NULL no bitmap, pois sei que a maioria dos valores de coluna não será NULL
    • Usando bit a bit ou em vez de adição para o bitmap
    • Verificando se o valor da coluna é NULL em oposição ao valor binário convertido

    Na minha máquina, o benchmark leva cerca de 27,5 segundos de CPU. Infelizmente, a etapa de bitmap NULL leva cerca de um terço desse tempo. Seria bom se houvesse uma maneira mais rápida de fazer isso.

    Aqui está a solução completa:

    SELECT
        CAST(ISNULL(COL1, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL2, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL3, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL4, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL5, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL6, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL7, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL8, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL9, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL10, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL11, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL12, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL13, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL14, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL15, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL16, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL17, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL18, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL19, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL20, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL21, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL22, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL23, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL24, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL25, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL26, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL27, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL28, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL29, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL30, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL31, 0) AS BINARY(4)) + 
        CAST(ISNULL(COL32, 0) AS BINARY(4)) + 
        CAST(       
            CASE WHEN COL1 IS NOT NULL THEN 0 ELSE 1 END | 
            CASE WHEN COL2 IS NOT NULL THEN 0 ELSE 2 END | 
            CASE WHEN COL3 IS NOT NULL THEN 0 ELSE 4 END | 
            CASE WHEN COL4 IS NOT NULL THEN 0 ELSE 8 END | 
            CASE WHEN COL5 IS NOT NULL THEN 0 ELSE 16 END | 
            CASE WHEN COL6 IS NOT NULL THEN 0 ELSE 32 END | 
            CASE WHEN COL7 IS NOT NULL THEN 0 ELSE 64 END | 
            CASE WHEN COL8 IS NOT NULL THEN 0 ELSE 128 END
        AS BINARY(1)) + 
        CAST(   
            CASE WHEN COL9  IS NOT NULL THEN 0 ELSE 1 END | 
            CASE WHEN COL10 IS NOT NULL THEN 0 ELSE 2 END | 
            CASE WHEN COL11 IS NOT NULL THEN 0 ELSE 4 END | 
            CASE WHEN COL12 IS NOT NULL THEN 0 ELSE 8 END | 
            CASE WHEN COL13 IS NOT NULL THEN 0 ELSE 16 END | 
            CASE WHEN COL14 IS NOT NULL THEN 0 ELSE 32 END | 
            CASE WHEN COL15 IS NOT NULL THEN 0 ELSE 64 END | 
            CASE WHEN COL16 IS NOT NULL THEN 0 ELSE 128 END
        AS BINARY(1)) + 
        CAST(   
            CASE WHEN COL17 IS NOT NULL THEN 0 ELSE 1 END | 
            CASE WHEN COL18 IS NOT NULL THEN 0 ELSE 2 END | 
            CASE WHEN COL19 IS NOT NULL THEN 0 ELSE 4 END | 
            CASE WHEN COL20 IS NOT NULL THEN 0 ELSE 8 END | 
            CASE WHEN COL21 IS NOT NULL THEN 0 ELSE 16 END | 
            CASE WHEN COL22 IS NOT NULL THEN 0 ELSE 32 END | 
            CASE WHEN COL23 IS NOT NULL THEN 0 ELSE 64 END | 
            CASE WHEN COL24 IS NOT NULL THEN 0 ELSE 128 END
        AS BINARY(1)) + 
        CAST(   
            CASE WHEN COL25 IS NOT NULL THEN 0 ELSE 1 END | 
            CASE WHEN COL26 IS NOT NULL THEN 0 ELSE 2 END | 
            CASE WHEN COL27 IS NOT NULL THEN 0 ELSE 4 END | 
            CASE WHEN COL28 IS NOT NULL THEN 0 ELSE 8 END | 
            CASE WHEN COL29 IS NOT NULL THEN 0 ELSE 16 END | 
            CASE WHEN COL30 IS NOT NULL THEN 0 ELSE 32 END | 
            CASE WHEN COL31 IS NOT NULL THEN 0 ELSE 64 END | 
            CASE WHEN COL32 IS NOT NULL THEN 0 ELSE 128 END
        AS BINARY(1))
    FROM dbo.TABLE_OF_32_INTS
    OPTION (MAXDOP 1);
    
    • 7
  3. Best Answer
    Steven Hibble
    2019-05-10T08:12:48+08:002019-05-10T08:12:48+08:00

    Que tal usar BINARY(5)e converter NULLs em algo fora do alcance para INTs:

    SELECT @dummy =
        ISNULL(CAST(COL1  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL2  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL3  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL4  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL5  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL6  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL7  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL8  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL9  AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL10 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL11 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL12 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL13 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL14 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL15 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL16 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL17 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL18 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL19 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL20 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL21 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL22 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL23 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL24 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL25 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL26 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL27 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL28 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL29 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL30 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL31 AS BINARY(5)), 0x0100000000) + 
        ISNULL(CAST(COL32 AS BINARY(5)), 0x0100000000)
    FROM dbo.TABLE_OF_32_INTS
    OPTION (MAXDOP 1);
    
    • 6
  4. Mikael Eriksson
    2019-05-10T01:24:21+08:002019-05-10T01:24:21+08:00

    Em meus testes, concat_ws foi um pouco mais rápido (18 segundos) do que sua solução de bitmap nula (26 segundos). Haverá mais dados para embaralhar para que você possa ver alguma degradação de desempenho em outros lugares e se quiser misturar isso com colunas de caracteres, você deve escolher o delimitador com sabedoria.

    select @dummy = cast(concat_ws('|',
             isnull(cast(T.COL1  as varchar(11)), ''),
             isnull(cast(T.COL2  as varchar(11)), ''),
             isnull(cast(T.COL3  as varchar(11)), ''),
             isnull(cast(T.COL4  as varchar(11)), ''),
             isnull(cast(T.COL5  as varchar(11)), ''),
             isnull(cast(T.COL6  as varchar(11)), ''),
             isnull(cast(T.COL7  as varchar(11)), ''),
             isnull(cast(T.COL8  as varchar(11)), ''),
             isnull(cast(T.COL9  as varchar(11)), ''),
             isnull(cast(T.COL10 as varchar(11)), ''),
             isnull(cast(T.COL11 as varchar(11)), ''),
             isnull(cast(T.COL12 as varchar(11)), ''),
             isnull(cast(T.COL13 as varchar(11)), ''),
             isnull(cast(T.COL14 as varchar(11)), ''),
             isnull(cast(T.COL15 as varchar(11)), ''),
             isnull(cast(T.COL16 as varchar(11)), ''),
             isnull(cast(T.COL17 as varchar(11)), ''),
             isnull(cast(T.COL18 as varchar(11)), ''),
             isnull(cast(T.COL19 as varchar(11)), ''),
             isnull(cast(T.COL20 as varchar(11)), ''),
             isnull(cast(T.COL21 as varchar(11)), ''),
             isnull(cast(T.COL22 as varchar(11)), ''),
             isnull(cast(T.COL23 as varchar(11)), ''),
             isnull(cast(T.COL24 as varchar(11)), ''),
             isnull(cast(T.COL25 as varchar(11)), ''),
             isnull(cast(T.COL26 as varchar(11)), ''),
             isnull(cast(T.COL27 as varchar(11)), ''),
             isnull(cast(T.COL28 as varchar(11)), ''),
             isnull(cast(T.COL29 as varchar(11)), ''),
             isnull(cast(T.COL30 as varchar(11)), ''),
             isnull(cast(T.COL31 as varchar(11)), ''),
             isnull(cast(T.COL32 as varchar(11)), ''))
           as varbinary(8000))
    from dbo.TABLE_OF_32_INTS as T
    option (maxdop 1)
    
    • 5
  5. David Browne - Microsoft
    2019-05-09T14:07:06+08:002019-05-09T14:07:06+08:00

    Se você puder garantir com antecedência que não armazene algum int específico, como, -2,147,483,648então, você pode fazer algo como:

     SELECT @dummy = 
            coalesce(CAST(COL1 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL2 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL3 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL4 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL5 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL6 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL7 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL8 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL9 AS BINARY(4)),  0x80000000) + 
            coalesce(CAST(COL10 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL11 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL12 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL13 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL14 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL15 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL16 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL17 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL18 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL19 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL20 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL21 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL22 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL23 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL24 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL25 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL26 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL27 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL28 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL29 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL30 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL31 AS BINARY(4)), 0x80000000) + 
            coalesce(CAST(COL32 AS BINARY(4)), 0x80000000) 
        FROM dbo.TABLE_OF_32_INTS
    
    • -1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve