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 / user-140866

James's questions

Martin Hope
James
Asked: 2020-12-24 11:51:48 +0800 CST

Qual é a maneira mais eficiente de converter com segurança de Datetime2 de volta para Datetime

  • 4

Eu tenho um projeto etl onde a fonte tem 60 colunas datetime2 e o destino é inteiramente datetime.

Alguns dias atrás, acordamos com um data warehouse vazio porque um usuário em um hospital, para um paciente, inseriu a data da cirurgia '1220-01-01'.

Eu temporariamente contornei o problema colocando cada uma das colunas em uma função personalizada:

    ALTER function [dbo].[scrub_datetime2](@date datetime2)
    returns date
    as
    begin

    declare @return date
    set @return = case when @date <= '1800-01-01' then null else @date end
    return @return

    end

E isso funciona bem para se livrar do texto vermelho, mas também dobrou o tempo que o trabalho leva para ser executado. Fico feliz em fazer minha parte, mantendo os hamsters na sala do servidor aquecidos durante o Natal, mas não posso realmente justificar perder 2,5 horas do precioso tempo noturno para esse problema.

Pergunta Como verificar com mais eficiência se um valor datetime2 caberá em datetime?

sql-server
  • 2 respostas
  • 591 Views
Martin Hope
James
Asked: 2020-07-23 04:47:00 +0800 CST

Por que a contagem de linhas do SSMS geralmente fica confusa?

  • 3

Estou tentando fazer com que algum código seja executado com o método 'execute, google the red text, faça o que o SO diz, repita' testado pelo tempo e notei que a contagem de linhas do manipulador de erros geralmente está errada.

Por exemplo, neste procedimento armazenado estará correto:

    create procedure why_it_be_like_dis

    as

    select * from INFORMATION_SCHEMA.tables where column_name like '%bananna%'

insira a descrição da imagem aqui

Mas em um exemplo do mundo real, ele estará desativado:

insira a descrição da imagem aqui

Pergunta: Por que os números de linha nem sempre coincidem?

mensagem de erro:

Msg 207, Level 16, State 1, Procedure delete from_and_load, Line 21 [Batch Start Line 7] Nome de coluna inválido 'SRGY_STM_LKP_ID'.

sp completo:

    USE [SRGRY_DMART_ETL]
    GO
    /****** Object:  StoredProcedure [dbo].[delete from_and_load]    Script Date: 7/22/2020 8:20:28 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    ALTER PROCEDURE [dbo].[delete from_and_load]
    AS
    BEGIN

    DECLARE @btch_start DATETIME
        ,@btch_end DATETIME

    SELECT @btch_start = getdate()
    EXEC [dbo].[snapshot_constraints]
    EXEC dbo.drop_all_constraints
    delete from [dbo].[CASE_2_PAT_CASE_BRG];
    delete from  [dbo].[CASE_2_PVDR_BRG];
    delete from [dbo].[CASE_2_DGNS_BRG];
    delete from [dbo].[CASE_2_PCD_BRG];
    delete from [dbo].[CASE_2_DLAY_RSN_BRG];

    DELETE
    FROM [dbo].[CASE_FCT] where SRGY_STM_LKP_ID in (111,333);
    DELETE FROM [dbo].[PAT_CASE_FCT] where SRGY_STM_LKP_ID in (111,333);
    DELETE FROM [dbo].[PVDR_RL_DIM] where STM_LKP_ID in (111,333);
    DELETE
    FROM [dbo].[ADM_TP_DIM] where SRGY_STM_LKP_ID in (111,333)
    DELETE
    FROM [dbo].[ANES_TP_DIM] where SRGY_STM_LKP_ID in (111,333)
    DELETE
    FROM [dbo].[CNCL_RSN_DIM] where SRGY_STM_LKP_ID in (111,333);
    DELETE
    FROM [dbo].[DLAY_IND_DIM] where SRGY_STM_LKP_ID in (111,333);

    delete from [dbo].[LOC_IDN_ARR] where STM_LKP_ID in (111,333);
    delete from [dbo].[PTNT_IDN_ARR]  where STM_LKP_ID in (111,333);
    --  V6 - delete from / DELETE { From Sooraj }
    delete from DBO.PTNT_INSR_ARR  where STM_LKP_ID in (111,333)

    DELETE
    FROM [dbo].[PVDR_DIM] where STM_LKP_ID in (111,333) --  YOU COULD TRY THE DEFAULT INSERT at a streatch
    DELETE
    FROM [dbo].[PTNT_DIM]  where STM_LKP_ID in (111,333)
    DELETE
    FROM [dbo].[LOC_DIM] where STM_LKP_ID in (111,333)


    --                  ##################      Abraham's Improvised Idea of SCM OR LOC ID     ################## END
    -- -- v5 SP list from Towsif
    PRINT '[dbo].[PROC_PATIENT_INSERT]'
    EXEC [dbo].[PROC_PATIENT_INSERT]
    PRINT '[dbo].[PROC_PTNTINSR_ARR_INSERT]'
    EXEC [dbo].[PROC_PTNTINSR_ARR_INSERT]
    PRINT '[dbo].[PROC_PVDR_DIM_INSERT]'
    EXEC [dbo].[PROC_PVDR_DIM_INSERT]
    PRINT 'dbo.PROC_LOC_FCY_HIER_INSERT'
    EXEC dbo.PROC_LOC_FCY_HIER_INSERT
    PRINT '[dbo].[PROC_LOC_IDN_ARR_INSERT]'
    EXEC [dbo].[PROC_LOC_IDN_ARR_INSERT];
    PRINT '[dbo].[PROC_DLAY_IND_DIM_INSERT]'
    EXEC [dbo].[PROC_DLAY_IND_DIM_INSERT];
    PRINT '[dbo].[PROC_CNCL_RSN_DIM_INSERT]'
    EXEC [dbo].[PROC_CNCL_RSN_DIM_INSERT];
    PRINT '[dbo].[PROC_ANES_TP_DIM_INSERT]'
    EXEC [dbo].[PROC_ANES_TP_DIM_INSERT];
    PRINT '[dbo].[PROC_ADM_TP_DIM_INSERT]'
    EXEC [dbo].[PROC_ADM_TP_DIM_INSERT];
    PRINT '[dbo].[PROC_PVDR_RL_DIM_INSERT]'
    EXEC [dbo].[PROC_PVDR_RL_DIM_INSERT];
    PRINT '[dbo].[PROC_PAT_CASE_FCT_INSERT]'
    EXEC [dbo].[PROC_PAT_CASE_FCT_INSERT];
    PRINT '[dbo].[PROC_CASE_FCT_INSERT]'
    EXEC [dbo].[PROC_CASE_FCT_INSERT];
    PRINT '[dbo].[PROC_PTNT_IDN_ARR_INSERT]'
    EXEC [dbo].[PROC_PTNT_IDN_ARR_INSERT];-- This should execute after PTNT_DIM has been loaded.” 
    PRINT '[dbo].[PROC_PTNT_DIM_EMPI_UPDATE]'
    EXEC [dbo].[PROC_PTNT_DIM_EMPI_UPDATE];
    PRINT '[dbo].[PROC_CASE_2_DLAY_RSN_BRG_INSERT]'
    EXEC [dbo].[PROC_CASE_2_DLAY_RSN_BRG_INSERT];
    PRINT '[dbo].[PROC_CASE_PCD_BRG_INSERT]'
    EXEC [dbo].[PROC_CASE_PCD_BRG_INSERT];
    PRINT '[dbo].[PROC_CASE_DGNS_BRG_INSERT]'
    EXEC [dbo].[PROC_CASE_DGNS_BRG_INSERT];
    PRINT '[dbo].[PROC_CASE_PVDR_BRG_INSERT]'
    EXEC [dbo].[PROC_CASE_PVDR_BRG_INSERT];
    PRINT '[dbo].[PROC_CASE_2_PAT_CASE_BRG_INSERT]'
    EXEC [dbo].[PROC_CASE_2_PAT_CASE_BRG_INSERT];
    PRINT 'dbo.PROC_CASE_VST_IDN_ARR_INSERT'
    EXEC dbo.PROC_CASE_VST_IDN_ARR_INSERT;
    PRINT 'dbo.PROC_SVC_DIM_INSERT'
    EXEC dbo.PROC_SVC_DIM_INSERT;
    PRINT 'dbo.PROC_GRP_DIM_INSERT'
    EXEC dbo.PROC_GRP_DIM_INSERT;
    PRINT '[dbo].[PROC_PVDR_2_SVC_BRG_INSERT]'
    EXEC [dbo].[PROC_PVDR_2_SVC_BRG_INSERT];
    PRINT '[dbo].[PROC_PVDR_2_GRP_BRG_INSERT]'
    EXEC [dbo].[PROC_PVDR_2_GRP_BRG_INSERT]
    PRINT 'dbo.[PROC_BLC_DIM_INSERT]'
    EXEC dbo.[PROC_BLC_DIM_INSERT]
    --print '[dbo].[PROC_BLC_SHD_BRG_INSERT]'
    --exec [dbo].[PROC_BLC_SHD_BRG_INSERT]
    PRINT '[dbo].[PROC_BLC_2_OWN_BRG_INSERT]'
    EXEC [dbo].[PROC_BLC_2_OWN_BRG_INSERT]
    --PRINT 'dbo.PROC_SCM_HH_PAT_CASE_INS'
    --EXEC dbo.PROC_SCM_HH_PAT_CASE_INS
    PRINT 'dbo.PROC_SCM_SIUH_PAT_CASE_INS'
    EXEC dbo.PROC_SCM_SIUH_PAT_CASE_INS


    EXEC dbo.add_all_constraints

    ---exec dbo.proc_record_counts
    --exec dbo.proc_column_counts
    SELECT @btch_end = getdate()

    INSERT INTO dbo.BTCH_LOG (
        BTCH_STRT_TS
        ,BTCH_END_TS
        )
    VALUES (
        @btch_start
        ,@btch_end
        )
        --exec dbo.proc_etl_stat_log_ins

    END
sql-server-2012
  • 1 respostas
  • 457 Views
Martin Hope
James
Asked: 2020-01-08 09:49:35 +0800 CST

Como você dividiu strings antes de string_split()

  • 1

Eu tenho algumas strings que preciso dividir em uma instância do SQL Server 2014.

Eu normalmente faria algo assim:

declare @bk nvarchar(1000)

set @bk = 'SIS5.0~person_id~696969'

select value from string_split(@bk, '~')

e também posso fazer assim:

declare @bk nvarchar(1000)

set @bk = 'SIS5.0~person_id~696969'

;with hizizzle as (
select left(@bk, charindex('~', @bk)-1) as flippity, right(@bk, len(@bk) - charindex('~', @bk)) as floppity)

select flippity, left(floppity, charindex('~',floppity)-1) as floppity, 
right(floppity, len(floppity) - charindex('~', floppity)) as flooo 
from hizizzle

...mas deve haver uma maneira melhor, certo?

Pergunta: Como você fazia divisões de cordas no passado antigo antes de 2014?

sql-server t-sql
  • 3 respostas
  • 1328 Views
Martin Hope
James
Asked: 2019-08-29 05:54:50 +0800 CST

As subconsultas podem produzir planos de execução diferentes dos CTEs?

  • 3

Eu estava conversando com o chefe, e ele prefere subconsultas sobre CTEs. Pessoalmente, eu detesto subconsultas. Ele mencionou que as subconsultas podem ser mais rápidas, mas não estou convencido. Fiz este pequeno teste:

    with classes as 
    (select top 10 Classkey from dimclass
    group by classkey
    order by count(1) desc),
    policies as (
    select CarrierKey, policykey, periodeffectivedate from dimpolicy),
    exposure as (
    select policykey, classkey  from DimExposure)


    select * from policies p
    inner join exposure x on p.PolicyKey = x.PolicyKey
    inner join classes c on x.ClassKey = c.Classkey

tem um plano de excussão de:

https://www.brentozar.com/pastetheplan/?id=SJYJUZNHS

    select p.CarrierKey, p.PolicyKey, p.periodeffectivedate from dimpolicy p
    inner join (select policykey, classkey  from DimExposure) x on p.PolicyKey = x.PolicyKey
    inner join (select top 10 Classkey from dimclass
                group by classkey
                order by count(1) desc) c on x.ClassKey = c.Classkey

tem o mesmo plano de execução:

https://www.brentozar.com/pastetheplan/?id=rJs_LbVSr

Pergunta: Isso é sempre assim? No mundo estranho e maravilhoso do SQL Server, a resposta sempre parece ser depende .

sql-server sql-server-2008
  • 2 respostas
  • 153 Views
Martin Hope
James
Asked: 2019-07-17 06:04:43 +0800 CST

Quais são as práticas recomendadas para alterar o e-mail de um usuário em um aplicativo?

  • 0

Estou trabalhando em um rud para um aplicativo de e-mail e gostaria de poder mudar "tudo". No momento, no entanto, ele corresponde à string JSON ao banco de dados com base no endereço de e-mail.

Problema: Nesse modelo, um usuário nunca pode alterar seu e-mail. Um novo endereço de e-mail = um novo usuário.

    declare @email varchar(255),
    @ID int

    insert into announcement_jsonlog (json_string)
    values (@json)

    select @email = email from 
            openjson(@json)
            WITH
            (email varchar(255)         '$.Email')


    insert into announcement_contacthistory (   
    ID, Email, Prefix, FirstName, MiddleInitial, LastName, Suffix, Title, Company, Address1, Address2, City, State, Zip, Zip_4, Phone, Extension, Unregistered, AddDateTime, LModifiedDateTime, 
    longkey, shortkey, History_addDateTime)

    select *, current_timestamp from announcement_contact
    where email = @email

Pergunta: como você criaria um CRUD que permitisse alterar o endereço de e-mail também?

azure-sql-database json
  • 1 respostas
  • 26 Views
Martin Hope
James
Asked: 2019-06-29 07:35:42 +0800 CST

Qual é a melhor maneira de descompactar objetos JSON no SQL Server?

  • 0

Parte 2 da minha incursão em JSON, gostaria de adicionar um usuário a vários grupos: insira uma matriz JSON em uma tabela.

Idealmente, o JSON ficaria assim:

    '{
    "Email": "[email protected]",
    "Prefix":null,
    "FirstName": "Worf",
    "MiddleInitial": "",
    "LastName": "Mogh",
    "Suffix": "Son Of",
    "Title" :"Commander",
    "Groups": [{"0", "1", "5"}]
    }' 

Atualmente, posso fazer isso com JSON assim:

    '{
    "Email": "[email protected]",
    "Prefix":null,
    "FirstName": "Worf",
    "MiddleInitial": "",
    "LastName": "Mogh",
    "Suffix": "Son Of",
    "Title" :"Commander",
    "Groups": "1,2,3,4"
    }' 

então "descompacte" com a seguinte cantiga:

    declare @groups varchar(1000)

    select @groups = Groups from openjson(@json)
                    WITH
            (

            Groups nvarchar(100)        '$.Groups'
            )

            print @groups

    select value from string_split(@groups, ',')

que retorna uma pequena tabela agradável assim:

Value
1
2
3
4

Problema Este é um JSON ruim e o desenvolvedor da Web vai tirar sarro de mim.

Pergunta Como você descompacta adequadamente uma matriz JSON no SQL Server?

azure-sql-database json
  • 1 respostas
  • 190 Views
Martin Hope
James
Asked: 2019-05-30 11:35:40 +0800 CST

Por que o sql server tem dificuldade em arredondar floats?

  • 0
    if exists (select 1 from sys.tables where name = 'd_ratio') begin drop table d_ratio end
    if exists (select 1 from sys.tables where name = 'elrd') begin drop table elrd end

    CREATE TABLE [dbo].[d_ratio](
        [index] [bigint] NULL,
        [Class] [bigint] NULL,
        [Dratio] [float] NULL,
        [ELR-Act1] [float] NULL,
        [ELR-Act2] [float] NULL
    ) ON [PRIMARY]
    GO

    Insert into D_ratio
    select 0,2503,0.285,0.75,1.33

    CREATE TABLE [dbo].[ELRD](
        [RATE_EFFDT] [date] NOT NULL,
        [CLASS] [varchar](4) NOT NULL,
        [ELR] [decimal](5, 2) NULL,
        [D_RATIO] [decimal](5, 2) NULL,
        [EXPO_ACT] [char](2) NOT NULL
    ) ON [PRIMARY]
    GO

    truncate table elrd
    insert into elrd(Rate_effdt, class, elr, d_ratio, EXPO_ACT)
    select getdate(), right('0000' + cast(class as varchar(10)),4), round(cast([ELR-Act1] as decimal(10,3)),2),Dratio, 1
    from d_ratio

    select Dratio, * from d_ratio
    select D_ratio, * from elrd

Ele entra como 0,285 e sai como 0,28.

No entanto, se eu lançar como um decimal com 3 pontos de precisão assim:

    truncate table elrd
    insert into elrd(Rate_effdt, class, elr, d_ratio, EXPO_ACT)
    select getdate(), right('0000' + cast(class as varchar(10)),4), round(cast([ELR-Act1] as decimal(10,3)),2), cast(dratio as decimal(10,3)), 1
    from d_ratio

Entra como 0,285 e sai como 0,29 - é arredondado corretamente.

Pergunta O que o SQL Server está fazendo? Está truncando floats e arredondando decimais?

sql-server-2008
  • 1 respostas
  • 94 Views
Martin Hope
James
Asked: 2019-02-20 11:56:57 +0800 CST

Por que gravar o CTE em uma tabela real forneceria uma melhoria de desempenho?

  • 3

Eu sou um grande fã de CTEs. Eles são os melhores. Você sabe, eu sei, todos nós sabemos.

Hoje, me queimei com uma consulta que é cerca de 1000x mais rápida se o CTE for gravado em uma tabela real.

A consulta em si está no link, mas suspeito que não seja importante. Para simplificar, eu precisava de uma lista de todos os sinistros em uma apólice de seguro em que um sinistro atendesse a uma determinada condição (cat = 1).

Uma versão simplificada fica assim:

    with cat_claims as (select distinct pol_nbr from claims where cat = 1)

    select * from claims c
    inner join policies p on p.polnbr = c.polnbr
    inner join cat_claims cat on c.pol_nbr= cat.pol_nbr

que foi super duper lento. Se eu reescrever para ficar assim:

    with cat_claims as (select distinct claim_nbr from claims where cat = 1)

    select * into cat_claims
    from cat_claims

    select * from claims c
    inner join policies p on p.polnbr = c.polnbr
    inner join cat_claims cat on c.pol_nbr = cat.pol_nbr

    drop table cat_claims

é muito, muito mais rápido. Isso é estranho para mim.

Pergunta Por que gravar o CTE em uma tabela real forneceria uma melhoria de desempenho?

Plano lento:

https://www.brentozar.com/pastetheplan/?id=HkyrpAtH4

Plano Rápido:

https://www.brentozar.com/pastetheplan/?id=ByGkAAKrN

sql-server sql-server-2008
  • 1 respostas
  • 709 Views
Martin Hope
James
Asked: 2019-02-15 08:18:08 +0800 CST

Qual é a melhor maneira de calcular a inflação ano a ano?

  • 2

Meu objetivo final é calcular o dinheiro dos anos anteriores como dólares de 2019.

Eu peguei esses números do BLS e criei o CPI_U no sql assim:

    create table CPI_U (year int, dec decimal(4,2), annual_avg decimal(4,2))

    insert into CPI_U (year, dec, annual_avg)

    values 
    (2000, 3.4,3.4),
    (2001, 1.6,2.8),
    (2002, 2.4,1.6),
    (2003, 1.9,2.3),
    (2004, 3.3,2.7),
    (2005, 3.4,3.4),
    (2006, 2.5,3.2),
    (2007, 4.1,2.8),
    (2008, 0.1,3.8),
    (2009, 2.7,-0.4),
    (2010, 1.5,1.6),
    (2011, 3.0,3.2),
    (2012, 1.7,2.1),
    (2013, 1.5,1.5),
    (2014, 0.8,1.6),
    (2015, 0.7,0.1),
    (2016, 2.1,1.3),
    (2017, 2.1,2.1),
    (2018, 1.9,2.4)

Estou então construindo um triângulo assim:

        with cpi_triangle as (

        select  c1.year,    c1.dec as c1, c2.dec as c2, c3.dec as c3, c4.dec as c4, c5.dec as c5,
                            c6.dec as c6, c7.dec as c7, c8.dec as c8, c9.dec as c9, c10.dec as c10,
                            c11.dec as c11, c12.dec as c12, c13.dec as c13, c14.dec as c14, c15.dec as c15,
                            c16.dec as c16, c17.dec as c17, c18.dec as c18, c19.dec as c19, c20.dec as c20


        from cpi_u c1
        left join cpi_u c2 on c1.year + 1 = c2.year
        left join cpi_u c3 on c1.year + 2 = c3.year
        left join cpi_u c4 on c1.year + 3 = c4.year
        left join cpi_u c5 on c1.year + 4 = c5.year
        left join cpi_u c6 on c1.year + 5 = c6.year
        left join cpi_u c7 on c1.year + 6 = c7.year
        left join cpi_u c8 on c1.year + 7 = c8.year
        left join cpi_u c9 on c1.year + 8 = c9.year
        left join cpi_u c10 on c1.year + 9 = c10.year
        left join cpi_u c11 on c1.year + 10 = c11.year
        left join cpi_u c12 on c1.year + 11 = c12.year
        left join cpi_u c13 on c1.year + 12 = c13.year
        left join cpi_u c14 on c1.year + 13 = c14.year
        left join cpi_u c15 on c1.year + 14 = c15.year
        left join cpi_u c16 on c1.year + 15 = c16.year
        left join cpi_u c17 on c1.year + 16 = c17.year
        left join cpi_u c18 on c1.year + 17 = c18.year
        left join cpi_u c19 on c1.year + 18 = c19.year
        left join cpi_u c20 on c1.year + 19 = c20.year)

        select *, 
      1 * (1 + isnull(c1,0)/100)* (1 + isnull(c2,0)/100)* (1 + isnull(c3,0)/100)* (1 + isnull(c4,0)/100)* (1 + isnull(c5,0)/100) 
        * (1 + isnull(c6,0)/100)* (1 + isnull(c7,0)/100)* (1 + isnull(c8,0)/100)* (1 + isnull(c9,0)/100) * (1 + isnull(c10,0)/100)
        * (1 + isnull(c11,0)/100)* (1 + isnull(c12,0)/100)* (1 + isnull(c13,0)/100)* (1 + isnull(c14,0)/100) * (1 + isnull(c15,0)/100)
        * (1 + isnull(c16,0)/100)* (1 + isnull(c17,0)/100)* (1 + isnull(c18,0)/100)* (1 + isnull(c19,0)/100) * (1 + isnull(c20,0)/100) as adj_factor
        from cpi_triangle

O triângulo fica assim:

    year    c1      c2      c3      c4      c5      c6      c7      c8      c9      c10     c11     c12     c13     c14     c15     c16     c17     c18     c19     c20     adj_factor
    2000    3.40    1.60    2.40    1.90    3.30    3.40    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    1.494493
    2001    1.60    2.40    1.90    3.30    3.40    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    1.445353
    2002    2.40    1.90    3.30    3.40    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    1.422590
    2003    1.90    3.30    3.40    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    1.389250
    2004    3.30    3.40    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    1.363346
    2005    3.40    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    1.319792
    2006    2.50    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.276395
    2007    4.10    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.245263
    2008    0.10    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.196218
    2009    2.70    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.195023
    2010    1.50    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.163606
    2011    3.00    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.146410
    2012    1.70    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.113019
    2013    1.50    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.094414
    2014    0.80    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.078241
    2015    0.70    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.069683
    2016    2.10    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.062247
    2017    2.10    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.040399
    2018    1.90    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    1.019000

Problema: Eu sinto que isso é realmente deselegante. Muitas pessoas inteligentes vão ver o produto final e, se olharem para minha metodologia, quero que pensem que sou inteligente também.

Pergunta: Qual você acha que é o melhor método para calcular a inflação ano após ano?

modo desafio: faça sem a função lag (ainda não tenho acesso a essa função).

Saída Desejada:

    year    dec annual_avg  adj_factor
    2000    3.40    3.40    1.4944930
    2001    1.60    2.80    1.4453530
    2002    2.40    1.60    1.4225900
    2003    1.90    2.30    1.3892500
    2004    3.30    2.70    1.3633460
    2005    3.40    3.40    1.3197920
    2006    2.50    3.20    1.2763950
    2007    4.10    2.80    1.2452630
    2008    0.10    3.80    1.1962180
    2009    2.70    -0.40   1.1950230
    2010    1.50    1.60    1.1636060
    2011    3.00    3.20    1.1464100
    2012    1.70    2.10    1.1130190
    2013    1.50    1.50    1.0944140
    2014    0.80    1.60    1.0782410
    2015    0.70    0.10    1.0696830
    2016    2.10    1.30    1.0622470
    2017    2.10    2.10    1.0403990
    2018    1.90    2.40    1.0190000
sql-server sql-server-2008
  • 2 respostas
  • 313 Views
Martin Hope
James
Asked: 2019-01-16 07:02:43 +0800 CST

Onde você vai para solicitar novos recursos no SSMS?

  • 11

Gostaria de perguntar à Microsoft:

  1. Para codificar por cores as páginas no SSMS com base no servidor ao qual elas estão conectadas

  2. Faça o ding quando os resultados da consulta forem retornados.

Pergunta: Como você solicita esses recursos?

ssms
  • 2 respostas
  • 2546 Views
Martin Hope
James
Asked: 2019-01-11 13:39:06 +0800 CST

Qual é a melhor maneira de reconstruir uma data a partir de entradas inteiras?

  • 8

Eu tenho um monte de relatórios financeiros, e queremos poder passar a eles duas entradas (ano e trimestre) como variáveis.

Estou fazendo assim, mas não gosto muito:

    declare @quarter int,
    @year int,
    @date date

    set @quarter = 4
    set @year = 2018


    set @date = cast(@year as varchar(4)) + '-01-01'
    set @date = dateadd(quarter, @quarter - 1, @date)


    print @date

Pergunta Qual é a melhor maneira de reconstruir uma data a partir de entradas inteiras?

resultado desejado:

    2018-10-01
sql-server-2008-r2
  • 4 respostas
  • 1418 Views
Martin Hope
James
Asked: 2018-11-01 05:29:33 +0800 CST

Consulta para obter todas as colunas em uma visualização

  • 0

Eu tenho esta pequena cantiga para concatenar todas as colunas em uma tabela, para escrever scripts rapidamente:

    create function [dbo].[get_columns] (@table_name varchar(255))
    returns varchar(max)

    as
    begin
    declare @name varchar(255),
    @object_id varchar(255),
    @string varchar(max)


    set @object_id = (select object_id from sys.objects with (nolock) where name = @table_name and type = 'u')

    set @string = (select stuff( (
    select ', ' + name   from sys.columns with (nolock)
    where object_id = @object_id
    and name != 'row_timestamp'
    for xml path ('')),1,2,''))

    return @string
    end

Pergunta: como você reescreveria isso para obter as colunas de uma visão?

sql-server sql-server-2008
  • 2 respostas
  • 335 Views
Martin Hope
James
Asked: 2018-10-11 06:21:55 +0800 CST

Qual é a melhor maneira de obter o top N, então todo o resto como n + 1

  • 1

Por exemplo, se eu tiver esta consulta:

    select top 10 medication_name, count(1)
    from DimMedical
    group by medication_name
    order by count(1) desc

Posso facilmente obter uma contagem das dez prescrições mais populares.

Eu posso adicionar 'tudo o resto' com uma União assim:

    select top 10 medication_name, count(1)
    from DimMedical
    group by medication_name
    order by count(1) desc
    union
    select 'other', count(1)
    from DimMedical
    where medication_name not in (
                select top 10 medication_name, count(1)
                from DimMedical
                group by medication_name
                order by count(1) desc)

mas isso atinge minha mesa três vezes! Também é difícil de suportar, pois a mesma cláusula where deve estar na subconsulta. Seria fácil para o próximo desenvolvedor mudar um e não o outro.

https://www.brentozar.com/pastetheplan/?id=Bk4IqFo9m

Pergunta: Qual é a melhor maneira de obter o top N, então todo o resto?

Dados de amostra (santo espaço em branco! Tenho algumas normalizações para fazer!):

    create table DimMedical (medication_name varchar(255))

    insert into DimMedical(medication_name)
    values ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('METHOCARBAMOL                      '),
    ('IBUPROFEN                          '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('ZIPSOR                             '),
    ('CELEBREX                           '),
    ('GABAPENTIN                         '),
    ('MELOXICAM                          '),
    ('TRAMADOL HCL                       '),
    ('BACLOFEN                           '),
    ('XODOL                              '),
    ('NAPROXEN                           '),
    ('CELEBREX                           '),
    ('CLONAZEPAM                         '),
    ('OXYCODONE HCL-ACETAMINOPHEN        '),
    ('LYRICA                             '),
    ('LIDODERM                           '),
    ('AMOXICILLIN/CLAVULANATE POTASSIUM  '),
    ('CIPROFLOXACIN                      '),
    ('CLINDAMYCIN HCL                    '),
    ('OXYCODONE HCL-ACETAMINOPHEN        '),
    ('OXYCODONE HCL-ACETAMINOPHEN        '),
    ('LYRICA                             '),
    ('OXYCODONE HCL-ACETAMINOPHEN        '),
    ('CELEBREX                           '),
    ('DICLOFENAC SODIUM                  '),
    ('ACETAMINOPHEN-CODEINE PHOSPHATE    '),
    ('VOLTAREN GEL                       '),
    ('ZIPSOR                             '),
    ('FENTANYL CITRATE                   '),
    ('OPANA ER                           '),
    ('CLARINEX                           '),
    ('NASONEX                            '),
    ('IPRATROPIUM BROMIDE-ALBUTEROL SULFA'),
    ('PROAIR HFA                         '),
    ('ADVAIR DISKUS 250/50               '),
    ('SPIRIVA                            '),
    ('OXYCODONE HCL-ACETAMINOPHEN        '),
    ('IBU                                '),
    ('GABAPENTIN                         '),
    ('NAPROXEN                           '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('TIZANIDINE HCL                     '),
    ('GABAPENTIN                         '),
    ('CYCLOBENZAPRINE HCL                '),
    ('ENDOCET                            '),
    ('ENDOCET                            '),
    ('ZOLPIDEM TARTRATE                  '),
    ('KADIAN                             '),
    ('TRAMADOL HCL                       '),
    ('CYCLOBENZAPRINE HCL                '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('TRAMADOL HCL                       '),
    ('GABAPENTIN                         '),
    ('TRAMADOL HCL                       '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('NAPROXEN                           '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('ZYPREXA                            '),
    ('LEXAPRO                            '),
    ('AMITRIPTYLINE HCL                  '),
    ('CYMBALTA                           '),
    ('MIRTAZAPINE                        '),
    ('LIDODERM                           '),
    ('KADIAN                             '),
    ('MELOXICAM                          '),
    ('CYCLOBENZAPRINE HCL                '),
    ('GABAPENTIN                         '),
    ('TRAZODONE HYDROCHLORIDE            '),
    ('DIAZEPAM                           '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('DEMEROL                            '),
    ('TRAMADOL HCL                       '),
    ('AMITRIPTYLINE HCL                  '),
    ('LITHIUM CARBONATE                  '),
    ('ENDOCET                            '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('Unknown'),
    ('NASONEX                            '),
    ('XOPENEX HFA                        '),
    ('ACETAMINOPHEN-CODEINE PHOSPHATE    '),
    ('MELOXICAM                          '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('OXYCODONE HCL                      '),
    ('OXYCONTIN                          '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('CARISOPRODOL                       '),
    ('OXYCODONE HCL-ACETAMINOPHEN        '),
    ('METHOCARBAMOL                      '),
    ('OXYCONTIN                          '),
    ('AMITRIPTYLINE HCL                  '),
    ('HYDROCODONE BITARTRATE-ACETAMINOPHE'),
    ('HYDROXYZINE PAMOATE                '),
    ('ALPRAZOLAM                         '),
    ('CARISOPRODOL                       '),
    ('CITALOPRAM HYDROBROMIDE            ')
sql-server sql-server-2008
  • 2 respostas
  • 90 Views
Martin Hope
James
Asked: 2018-09-13 11:35:45 +0800 CST

Por que os nomes dos objetos não podem começar com um número?

  • 7

Por exemplo, se estou criando uma view com um name '4aii', por que o SQL Server se importa que comece com um 4? Eu poderia chamar a mesa Fouraiiou IVaii.

Além disso, o que []faz nos bastidores para permitir que qualquer string seja usada como um nome?

Uma corda é uma corda, amirita?

sql-server identifier
  • 5 respostas
  • 13429 Views
Martin Hope
James
Asked: 2018-09-06 09:57:27 +0800 CST

Melhor maneira de colocar vírgulas em números grandes

  • 12

Comecei um novo trabalho e envolve olhar para um monte de números grandes. Existe uma maneira fácil de adicionar vírgulas a um campo intou decimalpara torná-lo legível?

Por exemplo, o SQL Server gera a coluna à esquerda, mas para minha própria sanidade, preciso que se pareça com a da direita:

2036150 -> 2,036,150  

... ou eu teria que escrever algo hediondo

left(right(vandalized_data),6),3) + ',' + right(left(vandalized_data),6),3)

função?

A coisa perfeita seria vírgulas na grade de exibição e, em seguida, inteiros simples na saída.

sql-server number-formatting
  • 2 respostas
  • 19298 Views
Martin Hope
James
Asked: 2018-07-21 04:35:37 +0800 CST

Qual é a melhor maneira de converter pacotes dtsx para consultar um novo servidor?

  • 1

Acabamos de mover nosso servidor sql para uma empresa de hospedagem, e agora todos os meus pacotes dtsx não funcionam.

Eu sei que em uma consulta específica você pode usar

    use SecondDatabase

mas existe uma maneira de fazer isso com o servidor também?

Objetivo: Não ter que reescrever meu código e colar [eih-dr01.db.org].livendb.dbo.na frente de cada tabela.

sql-server
  • 3 respostas
  • 75 Views
Martin Hope
James
Asked: 2018-07-20 11:10:11 +0800 CST

Migrar todas as tabelas para um novo servidor vinculado tem muitos prefixos

  • 1

Infelizmente, não posso fazer backup e restaurar, pois o novo banco de dados está em uma versão mais antiga do SQL.

Quando executo o seguinte script, recebo este erro:

    Msg 117, Level 15, State 1, Line 1
    The object name 'eih-dr01.eih.ehs.org.DBA.dbo.fp_monthly' contains more than the maximum number of prefixes. The maximum is 2.

    declare @table varchar(255),
    @sql nvarchar(max)

    declare c cursor local for


    select st.name from sys.tables st

    open c

    fetch next from c into @table

    set @sql = 'select * into [eih-dr01.eih.ehs.org].DBA.dbo.' + @table + ' from ' + @table

    print @sql
    exec sp_executesql @sql

    fetch next from c into @table

    close c
    deallocate c

Pergunta: Qual prefixo é supérfluo?

Pergunta real Por que meus caracteres '[',']' não estão aparecendo na minha instrução sql dinâmica?

sql-server
  • 2 respostas
  • 2422 Views
Martin Hope
James
Asked: 2018-07-20 05:11:28 +0800 CST

Ao configurar a segurança para servidores vinculados, o que a caixa de seleção Representar faz?

  • 2

Pergunta:

insira a descrição da imagem aqui

o que essa caixa de seleção faz?

sql-server linked-server
  • 2 respostas
  • 1436 Views
Martin Hope
James
Asked: 2018-07-13 07:51:15 +0800 CST

você pode usar msdb.dbo.sp_send_dbmail para configurar compromissos do calendário?

  • 3

Por exemplo, na área de saúde, todo funcionário faz um teste de PPD (eles cutucam seu braço com alguma coisa) e você tem que voltar em 48 horas para ver se brotou uma cabeça extra.

Todo mundo esquece.

As enfermeiras documentam em seu prontuário que espetaram o paciente, e eu posso enviar um e-mail lembrando o funcionário de ir verificar a cabeça extra, mas prefiro fazer um convite de calendário.

Pergunta

Como você configuraria um compromisso de calendário do Outlook do SQL Server?

sql-server
  • 2 respostas
  • 1373 Views
Martin Hope
James
Asked: 2018-07-12 09:21:11 +0800 CST

um SP para remover nulos de uma tabela

  • 1

Acho que estou perto, mas os apóstrofos estão me matando:

    create procedure denull (@database varchar(255), @table varchar(255))

    as

    declare @sql nvarchar(max)

    set @sql = ' declare @name varchar(255), @column varchar(255))

    declare c cursor local for 

    select st.name, sc.name from ' + @database + '.sys.tables st
    inner join sys.columns sc on st.object_id = sc.object_id
    where st.name = ''' + @table + '''

    update ''''@name'''' set ''''@column'''' = '''' where ''''@column is null''



    fetch next from st.name, sc.name

    close c

    deallocate c
    '
    print @sql

    exec sp_executesql @sql

ele imprime para:

     declare @name varchar(255), @column varchar(255))

    declare c cursor local for 

    select st.name, sc.name from livendbmirror.sys.tables st
    inner join sys.columns sc on st.object_id = sc.object_id
    where st.name = 'CMS_27_Psych_results'

    update ''@name'' set ''@column'' = '' where ''@column is null'



    fetch next from st.name, sc.name

    close c

    deallocate c
    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near ')'.
    Msg 102, Level 15, State 1, Line 9
    Incorrect syntax near ''.
    Msg 105, Level 15, State 1, Line 9
    Unclosed quotation mark after the character string '



    fetch next from st.name, sc.name

    close c

    deallocate c
    '.

Pergunta: Como posso remover dinamicamente valores nulos e substituí-los por '' para usuários finais exigentes?

sql-server
  • 2 respostas
  • 49 Views

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