小编Jam*_*mes的帖子

fetch 和 fetch next 有什么区别?

我有一个游标发送寻呼机消息,偶尔它会发送重复的消息。语法如下所示:

    declare @col1 varchar(255),
    @col2 varchar(255)

    declare c cursor local for

    select column1, column2
    from table
    where flippity = 'floppity'

    open c
    fetch  from c into @col1, @col2
    While @@FETCH_STATUS = 0
    begin

    sp_do_your_thing @col1, @col2

    fetch next from c into @col1, @col2
    end
    close c
    deallocate c
Run Code Online (Sandbox Code Playgroud)

问题:如果我得到重复,可能是提取吗?他们都需要下一个,还是都不需要?

sql-server

4
推荐指数
1
解决办法
1905
查看次数

您如何管理服务帐户密码?

安全人员希望所有AD 密码每三个月过期一次。我真的对此并不感到兴奋,因为我肯定不会记得,而且当它们到期时,我很可能会醉倒在我的船上。

问题您/应该多久更改一次 sql 服务帐户的密码?

security sql-server

4
推荐指数
1
解决办法
2238
查看次数

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

我有一个 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
Run Code Online (Sandbox Code Playgroud)

这对于摆脱红色文本很有效,但它也使工作运行所需的时间增加了一倍。我很高兴尽自己的一份力量,让服务器机房里的仓鼠在圣诞节期间保持温暖,但我真的无法证明为此问题浪费了 2.5 小时的宝贵过夜时间。

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

sql-server

4
推荐指数
2
解决办法
408
查看次数

当您的 SQL 服务器获得适当许可时,它应该是什么样子?

新工作,浏览我的服务器库存。我一直在使用这个脚本来获取版本和许可:

select @@version as version, 
SERVERPROPERTY('LicenseType') as licenseType, 
SERVERPROPERTY('NumLicenses') as NumLicenses  
Run Code Online (Sandbox Code Playgroud)

但是我所有的结果都返回一个禁用的许可证,并且数字为空:

version                                 licenseType NumLicenses
Microsoft SQL Server 2008 R2 (SP2) ...  DISABLED    NULL
Run Code Online (Sandbox Code Playgroud)

这让我质疑自己。许可不是我以前必须处理的事情。这个查询正确吗?它甚至有可能在没有获得适当许可的情况下运行吗?

问题:如果我的服务器获得了适当的许可,我的查询应该返回什么?有没有更好的检查方法?

sql-server

3
推荐指数
1
解决办法
193
查看次数

在 SQL Server 作业的步骤之间传递变量/值的最佳方法是什么

例如,如果我创建一个 dtsx 包来填写 Excel 工作表,但只有在有实际数据时才通过电子邮件发送出去?

sql-server jobs

3
推荐指数
1
解决办法
3190
查看次数

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

例如,在医疗保健领域,每个员工都会接受 PPD 测试(他们用什么东西戳你的手臂),你必须在 48 小时后回去看看你是否长出了一个额外的头。

大家都忘记了。

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

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

sql-server

3
推荐指数
1
解决办法
1069
查看次数

为什么将 CTE 写入实际表会提供性能改进?

我是 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
Run Code Online (Sandbox Code Playgroud)

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

    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 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

3
推荐指数
1
解决办法
580
查看次数

子查询可以生成与 CTE 不同的执行计划吗?

我正在与老板交谈,他更喜欢子查询而不是 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
Run Code Online (Sandbox Code Playgroud)

有一个执行计划:

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 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server cte subquery

3
推荐指数
1
解决办法
130
查看次数

连接多列外键的最佳方法是什么?

我们正在扩展我们的数据仓库以包含一个新的源系统。在新系统中,我们希望主键只有一列,但在旧系统中,它是两列。

例如:

create table #new_case (case_id varchar(255))

create table #old_case (patient_id int, care_event_counter int)

insert into #old_case (patient_id, Care_event_counter)
values 
(55, 1),
(55, 2),
(55, 3),
(56, 1),
(57, 1),
(57, 2)

insert into #new_case (case_id)
select cast(patient_id as varchar(55)) + '_' + cast(care_event_counter as varchar(55))
from #old_case

select * from #new_case
Run Code Online (Sandbox Code Playgroud)

问题:这在大规模上必须非常慢,我更喜欢全面使用 int 。

问题:如何智能合并两个整数列?有没有数学技巧可以用来推导出更快的值?

data-warehouse sql-server sql-server-2016

3
推荐指数
1
解决办法
905
查看次数

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

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

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

    create procedure why_it_be_like_dis

    as

    select * from INFORMATION_SCHEMA.tables where column_name like '%bananna%'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

在此处输入图片说明

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

错误信息:

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

完整版:

    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]; …
Run Code Online (Sandbox Code Playgroud)

sql-server-2012

3
推荐指数
1
解决办法
168
查看次数