我有一个游标发送寻呼机消息,偶尔它会发送重复的消息。语法如下所示:
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)
问题:如果我得到重复,可能是提取吗?他们都需要下一个,还是都不需要?
安全人员希望所有AD 密码每三个月过期一次。我真的对此并不感到兴奋,因为我肯定不会记得,而且当它们到期时,我很可能会醉倒在我的船上。
问题您/应该多久更改一次 sql 服务帐户的密码?
我有一个 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 值是否适合日期时间?
新工作,浏览我的服务器库存。我一直在使用这个脚本来获取版本和许可:
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)
这让我质疑自己。许可不是我以前必须处理的事情。这个查询正确吗?它甚至有可能在没有获得适当许可的情况下运行吗?
问题:如果我的服务器获得了适当的许可,我的查询应该返回什么?有没有更好的检查方法?
例如,如果我创建一个 dtsx 包来填写 Excel 工作表,但只有在有实际数据时才通过电子邮件发送出去?
例如,在医疗保健领域,每个员工都会接受 PPD 测试(他们用什么东西戳你的手臂),你必须在 48 小时后回去看看你是否长出了一个额外的头。
大家都忘记了。
护士在他们的电子病历中记录他们刺伤了病人,我可以发送一封电子邮件提醒员工去检查他们的额外头部,但我宁愿让它成为日历邀请。
题
您将如何从 SQL Server 设置 Outlook 日历约会?
我是 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) 我正在与老板交谈,他更喜欢子查询而不是 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) 我们正在扩展我们的数据仓库以包含一个新的源系统。在新系统中,我们希望主键只有一列,但在旧系统中,它是两列。
例如:
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 。
问题:如何智能合并两个整数列?有没有数学技巧可以用来推导出更快的值?
我试图让一些代码运行经过时间测试的“执行,谷歌搜索红色文本,做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)