标签: sql-server

无需重新启动 SQL Server 即可更改 SQL Server 服务帐户

出于安全考虑,我们希望每天更改启动 SQL Server 服务的密码。是否可以在不重新启动服务的情况下执行此操作?

如果有可能,更改会立即应用,还是我最终需要重新启动服务以获取新密码?

我们正在考虑在 Windows 操作系统的服务选项中而不是在 SQL Server 配置管理器中进行此更改。

security sql-server configuration-manager

2
推荐指数
1
解决办法
1917
查看次数

在 SQL 中的 CASE 表达式中转换为 int

我有一个查询,它从 10 个表和一个子查询中提取数据。其中一个选择是针对某个位置,我正在使用 case 表达式来清理输出数据。它拉取数据的字段是varchar,数据可以是这样的值:USA800, admin, ccc-ulw, ccc-ury, 002-Carson, 066-Nellis BX, 042-Junction City(还有更多) .

如果它是不以数字开头的位置之一,我希望 case express 报告一个特定值,但如果它是一个数字,我希望它只返回数字,作为一个整数(删除 0) .

这是我现在拥有的查询(可能不需要整个 SQL,但我认为它会有助于上下文):

    select 
    ct.id as CaseID
    ,c.first_name as FirstName
    ,c.last_name as LastName
    ,c.id as CustomerID
    ,SUBSTRING(sdu.User_ID,CHARINDEX('-',sdu.User_ID)+1,(((LEN(sdu.User_ID))-CHARINDEX('-', REVERSE(sdu.User_ID)))-CHARINDEX('-',sdu.User_ID))) as [Username from Navigator]
    ,case sdu.Application_Name when 'Navigator' then sn.[RESP CODE] else '' end as [Responsibility Code from Navigator]
    ,case sdu.Application_Name when 'Navigator' then RIGHT(sn.[EMUL STATION], 4) else '' end as [CStat From Navigator]
    ,ce02.id as JobCode
    ,case l.id 
        when 'USA800' then 'USA800' …
Run Code Online (Sandbox Code Playgroud)

sql-server cast sql-server-2014

2
推荐指数
1
解决办法
7048
查看次数

SQL Server 中的 MAX 工作线程 2012/14/16

我只是在浏览系统运行状况扩展事件时遇到一个事件,其中包含用于显示工作线程状态的查询处理的诊断结果:

  1. 当我有 80 个逻辑处理器时,为什么最大工作线程显示 2994,根据 msdn 计算,这里 512 + ((logical CPU's - 4) * 16)看起来不正确。但是,这里的最新链接对于大于 64 的逻辑处理器是有意义的,其中 16 的计算更改为 32。但是该链接说从 SQL 2017 开始,但是我得到的数字 2994 是针对 SQL2012, 14 16 的,其中逻辑处理器数为 80 . 我在这里遗漏了什么吗?

sp_configure 中的 max worker 设置设置为“0”

  1. 回到该系统运行状况事件状态,显示以下 no 的警告:

maxWorkers="2944" workersCreated="456" workersIdle="314" tasksCompletedWithinInterval="1021881" pendingTasks="1"

我应该检查其他东西还是可以忽略它?

sql-server sql-server-2012 sql-server-2014 cpu

2
推荐指数
1
解决办法
384
查看次数

是否可以使用特定事务的 ReadCommitted 隔离级别覆盖 ReadCommittedSnapshot 隔离级别?

我的数据库的默认隔离级别是“读提交快照”。请看下面的截图。

读取提交的快照

我的数据库中有包含以下数据的“门票”表。

在此处输入图片说明

现在在连接 1 中,我正在启动一个隔离级别为“已提交读”的新事务。我要将#TicketID“2”的优先级更新为“中等

在此处输入图片说明

从连接 2,我试图访问 #TicketID "2" 的详细信息。并且它仍然从由读取提交的快照隔离创建的版本存储中获取值,这不是预期的行为。

在此处输入图片说明

根据文档,如果事务使用“读提交”隔离级别,则在事务执行提交/回滚之前,任何其他事务都无法访问该行。

谁能告诉我为什么在给定的情况下它没有发生?我也很想知道,为什么事务级别的隔离不能覆盖在数据库级别设置的默认隔离级别(这里是读取提交的快照)?


为了更清楚地说明事务范围上的隔离覆盖,我提供了以下信息。

我已将数据库隔离设置为已提交读。

在此处输入图片说明

现在在连接 1 中,我正在启动我的事务以更新票证优先级。

在此处输入图片说明

在连接 2 中,我正在尝试访问记录。但这不会完成,因为事务隔离级别处于“读提交”模式。

在此处输入图片说明

在连接 3 中,我试图访问隔离级别为“未提交读取”的记录。在这里我们可以看到记录,因为它将覆盖在数据库级别设置的默认隔离。

在此处输入图片说明

当我在数据库级别设置“快照隔离”并在另一个事务范围内覆盖它时,我期待相同的行为。对我来说,它总是从版本存储中返回最后提交的值,而不管事务范围中提到的隔离级别如何。我希望我清楚地表达了我的担忧.. :)

sql-server isolation-level snapshot-isolation

2
推荐指数
1
解决办法
510
查看次数

SQL Server 的 VM 备份能否用于还原 SQL 数据库

我想知道 VM 备份是否会在没有完整性问题的情况下恢复 SQL 数据库......也就是说......我们每晚备份 SQL 并保留 3 个副本,我们使用 VM 备份并保留 14 个副本......如果我们必须恢复第 10 天来自 VM 我们是否有任何完整性问题,我知道我们无法进行日志恢复,但是那个时间点总比没有好。我们已经完成了一个测试恢复,它似乎有效,但我也希望专家们给出答案。谢谢

sql-server

2
推荐指数
1
解决办法
140
查看次数

将任意 GUID 插入 [uniqueidentifier] 列是否需要“SET IDENTITY_INSERT”?

SQL Server 2016 和 2017 标准版

我需要将原始数据(来自另一个表)插入有两uniqueidentifier列的表中。

这是否需要我使用SET IDENTITY_INSERT Carrier ON

这是表:

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

CREATE TABLE [dbo].[Parkingspace](
    [ParkingspaceId] [uniqueidentifier] NOT NULL,
    [AccountId] [uniqueidentifier] NULL,
    [ParkingspaceType] [smallint] NULL,
 CONSTRAINT [PK_ParkingspaceId] PRIMARY KEY CLUSTERED 
(
    [ParkingspaceId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

如果没有IDENTITY_INSERT选项,以下内容是否有效?(我认为应该,但这里的 DBA 非常喜欢这个IDENTITY_INSERT选项。)

INSERT INTO Parkingspace 
  (ParkingspaceID,AcountID,ParkingspaceType) …
Run Code Online (Sandbox Code Playgroud)

sql-server uniqueidentifier identity sql-server-2016 sql-server-2017

2
推荐指数
1
解决办法
1243
查看次数

计算年度通货膨胀的最佳方法是什么?

我的最终目标是将前几年的钱计算为 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)
Run Code Online (Sandbox Code Playgroud)

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

        with cpi_triangle as (

        select  c1.year,    c1.dec as c1, c2.dec as c2, c3.dec as c3, c4.dec …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

2
推荐指数
1
解决办法
187
查看次数

如何清除 SQL Server 中的临时数据库内容?

正如标题所暗示的,我将清除 SQL Server 中临时数据库的内容。SolarWinds 正在生成严重警报,我想清除 tempdb 工作文件和工作表。

我怎样才能做到这一点?我可以重新启动 MSSQLSERVER 服务以清除内容吗?

sql-server tempdb temporary-tables sql-server-2016

2
推荐指数
1
解决办法
4780
查看次数

当前查询完成时执行新查询

我正在将一些数据插入 SQL Server (2016)。由于这是手动一次性加载,因此我没有费心花费大量时间以最有效的方式编写它;但是,某些负载所需的时间比最初预期的要长得多 - 所以这是我的问题。

我可以以某种方式告诉服务器在当前查询完成后立即执行另一个查询吗?我本来可以通过在代码的下一部分上按 F5 来手动完成此操作 - 但由于加载时间比预期的要长,我希望服务器在第一部分完成时以某种方式自动执行下一部分代码。

这完全可能,而无需 1) 等待当前查询完成或 2) 取消当前查询并立即重新运行整个批次,包括我的代码的下一步?

希望这是有道理的!

谢谢 :-)

sql-server

2
推荐指数
1
解决办法
754
查看次数

计算每行的总“行上”字节......简单的方法

我们要计算表中每一行的总“行上”存储字节数。正如我们所理解的,我们必须将每一列的 DATALENGTH() 相加,同时还要考虑 NULL 和诸如 VARCHAR(MAX) 之类的东西,它们在“行”上只有一个 24 字节的指针。我们知道每一行也有一些开销,这在下面的查询中没有考虑。

SELECT   ROW_ID,

         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL1','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL1), 1)
         END
          +
         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL2','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL2), 1)
         END
          +
         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL3','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL3), 1)
         END
          +
         ...
         ...
         AS ROW_SIZE

FROM     EXAMPLE_TABLE

ORDER BY ROW_SIZE DESC
;
Run Code Online (Sandbox Code Playgroud)

多么野兽!而且这只是一个近似值。

然后我们发现

DBCC SHOWCONTIG ('EXAMPLE_TABLE') WITH TABLERESULTS
Run Code Online (Sandbox Code Playgroud)

返回最大记录大小。这表明 SQL Server 中已经有一个算法可以计算行的确切大小。

我们如何直接访问该算法?

sql-server storage dbcc size sql-server-2017

2
推荐指数
1
解决办法
269
查看次数