AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-140866

James's questions

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

从 Datetime2 安全转换回 Datetime 的最有效方法是什么

  • 4

我有一个 etl 项目,其中源有 60 个 datetime2 列,目标完全是 datetime。

几天前,我们醒来时发现一个空的数据仓库,因为一家医院的一位用户为一位患者输入了“1220-01-01”的手术日期。

我通过在自定义函数中整理每一列暂时解决了这个问题:

    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

这可以消除红色文本,但它也使作业运行的时间增加了一倍。我很高兴尽自己的一份力,让服务器机房里的仓鼠在圣诞节期间保持温暖,但我真的不能证明为此问题浪费了 2.5 小时宝贵的通宵时间。

问题如何最有效地检查 datetime2 值是否适合日期时间?

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

为什么 SSMS 的行数经常出错?

  • 3

我试图让一些代码运行经过时间测试的“执行,谷歌搜索红色文本,执行 SO 所说,重复”方法,我注意到错误处理程序的行数通常是错误的。

例如,在这个存储过程中它是正确的:

    create procedure why_it_be_like_dis

    as

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

在此处输入图像描述

但在现实世界的例子中,它将关闭:

在此处输入图像描述

问题:为什么行号总是不匹配?

错误信息:

消息 207,级别 16,状态 1,过程删除 from_and_load,第 21 行 [批处理开始第 7 行] 列名“SRGY_STM_LKP_ID”无效。

完整的sp:

    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 个回答
  • 457 Views
Martin Hope
James
Asked: 2020-01-08 09:49:35 +0800 CST

你是如何在 string_split() 之前拆分字符串的

  • 1

我有一些字符串需要在 SQL Server 2014 实例上拆分。

我通常会这样做:

declare @bk nvarchar(1000)

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

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

我也可以这样做:

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

......但必须有更好的方法,对吧?

问:在 2014 年之前的古代,你是如何进行弦分裂的?

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

子查询能否产生与 CTE 不同的执行计划?

  • 3

我正在和老板交谈,他更喜欢子查询而不是 CTE。就个人而言,我讨厌子查询。他提到子查询可以更快,但我不相信。我进行了这个简短的测试:

    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

有一个执行计划:

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

具有相同的执行计划:

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

问题:总是这样吗?在 SQL Server 奇异而奇妙的世界中,答案似乎总是视情况而定。

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

在应用程序中更改用户电子邮件的最佳做法是什么?

  • 0

我正在为一个电子邮件应用程序做一个 crud,我希望能够改变“一切”。但是,现在它会根据电子邮件地址将 JSON 字符串与数据库匹配。

问题:在这种模式下,用户永远不能更改他们的电子邮件。一个新的电子邮件地址 = 一个新用户。

    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

问题:你将如何设计一个让你也可以更改电子邮件地址的 CRUD?

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

在 SQL Server 中解压 JSON 对象的最佳方法是什么?

  • 0

我涉足 JSON 的第 2 部分,我想将一个用户添加到多个组:将一个 JSON 数组插入到一个表中。

理想情况下,JSON 应如下所示:

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

目前,我可以像这样使用 JSON 来做到这一点:

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

然后用下面的小曲“解压”它:

    declare @groups varchar(1000)

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

            Groups nvarchar(100)        '$.Groups'
            )

            print @groups

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

它返回一个像这样的漂亮的小表:

Value
1
2
3
4

问题这是糟糕的 JSON,Web 开发人员会取笑我。

问题如何在 SQL Server 中正确解压 JSON 数组?

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

为什么 sql server 很难舍入浮点数?

  • 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

输入为 0.285,输出为 0.28。

但是,如果我将其转换为精度为 3 点的小数,如下所示:

    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

它以 0.285 的形式输入,以 0.29 的形式输出 - 它被正确地四舍五入。

问题SQL Server 在做什么?它是截断浮点数和舍入小数吗?

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

为什么将 CTE 写入实际表会提高性能?

  • 3

我是 CTE 的超级粉丝。他们是最棒的。你知道,我知道,我们都知道。

今天,如果将 CTE 写入真实表,查询速度会提高大约 1000 倍,这让我很头疼。

查询本身在链接中,但我怀疑它并不重要。为简化起见,我需要一份保险单中所有索赔的清单,其中一项索赔满足特定条件 (cat = 1)。

简化版本如下所示:

    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

这是超级慢。如果我重写它看起来像这样:

    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

它的方式,方式更快。这对我来说很奇怪。

问题为什么将 CTE 写入实际表会提高性能?

慢计划:

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

快速计划:

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

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

计算同比通货膨胀率的最佳方法是什么?

  • 2

我的最终目标是将往年的钱计算为 2019 年的美元。

我从 BLS 获得了这些数字,并在 sql 中创建 CPI_U,如下所示:

    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)

然后我像这样构建一个三角形:

        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

三角形看起来像这样:

    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

问题:我觉得这样真的很不优雅。很多聪明人会看到最终产品,如果他们看我的方法,我希望他们也认为我很聪明。

问题:您认为逐年计算通货膨胀率的最佳方法是什么?

挑战模式:在没有滞后功能的情况下进行(我还没有访问该功能)。

期望的输出:

    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 个回答
  • 313 Views
Martin Hope
James
Asked: 2019-01-16 07:02:43 +0800 CST

您在哪里请求 SSMS 中的新功能?

  • 11

我想问微软:

  1. 根据所连接的服务器对 SSMS 中的页面进行颜色编码

  2. 返回查询结果时让它响起来。

问题:您如何要求这些功能?

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

从整数输入重建日期的最佳方法是什么?

  • 8

我有一堆财务报告,我们希望能够将两个输入(年和季度)作为变量传递给它们。

我这样做,但我真的不喜欢它:

    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

问题从整数输入重建日期的最佳方法是什么?

期望的结果:

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

查询以获取视图中的所有列

  • 0

我有这个小曲子来连接表格中的所有列,以便快速编写脚本:

    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

问题:您将如何重写它以获得视图的列?

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

获得前 N 的最佳方法是什么,然后是 n + 1

  • 1

例如,如果我有这个查询:

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

我可以很容易地统计出最受欢迎的十个药方。

我可以像这样用 Union 添加“其他所有内容”:

    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)

但这把我的桌子打了三遍!它也很难支持,因为相同的 where 子句必须在子查询中。下一个开发人员很容易更改一个而不是另一个。

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

问题:什么是获得前 N 项的最佳方法,然后是其他所有内容?

样本数据(神圣的空白!我有一些规范化要做!):

    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 个回答
  • 90 Views
Martin Hope
James
Asked: 2018-09-13 11:35:45 +0800 CST

为什么对象名称不能以数字开头?

  • 7

例如,如果我正在使用 name 创建视图'4aii',为什么 SQL Server 会关心它以 a 开头4?我可以打电话给桌子Fouraii或IVaii。

此外,[]在幕后做了什么来允许将任何字符串用作名称?

一根绳子就是一根绳子,amirite?

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

将逗号放入大数的最佳方法

  • 12

我开始了一份新工作,它涉及查看一堆大数字。有没有一种简单的方法可以将逗号添加到intordecimal字段以使其可读?

例如,SQL Server 输出左侧的列,但为了我自己的理智,我需要它看起来像右侧的列:

2036150 -> 2,036,150  

...或者我必须写一些令人发指的

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

功能?

完美的东西是显示网格中的逗号,然后是输出中的纯整数。

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

转换 dtsx 包以查询新服务器的最佳方法是什么?

  • 1

我们刚刚将我们的 sql server 移动到托管公司,现在我所有的 dtsx 打包都不起作用。

我知道在特定的查询中你可以使用

    use SecondDatabase

但是有没有办法在服务器上做到这一点呢?

目标:不必重写我的代码并粘贴[eih-dr01.db.org].livendb.dbo.在每个表的前面。

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

将每个表迁移到新的链接服务器有太多前缀

  • 1

不幸的是,我无法备份和恢复,因为新数据库位于旧版本的 SQL 上。

当我运行以下脚本时,我收到此错误:

    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

问题:哪个前缀是多余的?

实际问题为什么我的 '[',']' 字符没有出现在我的动态 sql 语句中?

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

为链接服务器设置安全性时,模拟复选框有什么作用?

  • 2

问题:

在此处输入图像描述

这个复选框有什么作用?

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

您可以使用 msdb.dbo.sp_send_dbmail 设置日历约会吗?

  • 3

例如,在医疗保健行业,每位员工都会接受 PPD 测试(他们会用某种东西戳你的手臂),你必须在 48 小时内回去看看你是否长出了一个额外的脑袋。

每个人都忘记了。

护士在他们的 EHR 中记录他们刺伤了病人,我可以发送一封电子邮件提醒员工去检查他们的额外头部,但我宁愿将其设为日历邀请。

问题

您将如何从 SQL Server 设置 outlook 日历约会?

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

从表中去除空值的 SP

  • 1

我想我很接近,但撇号让我很生气:

    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

它打印出来:

     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
    '.

问题:对于挑剔的最终用户,我如何动态删除空值并将它们替换为 ''?

sql-server
  • 2 个回答
  • 49 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve