标签: sql-server

为什么用左连接做四个简单的选择而不是一个选择更快?

我需要从A包含三个外键的表中找到一个值到另外两个表BC.

为了实验,我测试了两种查询值的方法:

多个查询:

declare @start int = (select top 1 [Id] from [B] where [Day] = '2015-01-01')
declare @end int = (select top 1 [Id] from [B] where [Day] = '2017-06-14')
declare @category int = (select top 1 [Id] from [C] where [Title] = 'Hello, World!')

select top 1 [Name]
from [A]
where [StartId] = @start
    and [EndId] = @end
    and [CategoryId] = @category
    and [Day] = '2016-05-27'
Run Code Online (Sandbox Code Playgroud)

单个查询:

select top 1 [Name]
from …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2012 query-performance

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

构建新版本的表并通过重命名替换旧版本,这是一个好主意吗?

我们有一个稍重的表,它半频繁地(每约 5 分钟)由程序重新创建。我想知道是否可以做些什么来最大限度地减少表重建期间的停机时间,并且到目前为止已经想到了两种可能性(让我们称表为“设备”):

选项 A
1) 在过程中创建新表,命名Device_new
2) 将旧表重命名DeviceDevice_old
3) 将新表重命名Device_newDevice

选项 B
与选项 A 相同,只是使用分区切换。
警告:分区切换的设置要复杂得多,并且对使用有相当严格的要求。

这些选项是否是糟糕的解决方案,如果是,您将如何解决此用例?谢谢你。

sql-server

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

Tables not displaying after creating database by script. Do I need to insert?

I successfully created (scripted) a database in SQL Server 2012.

My problem is that while the database itself is listed in the object explorer, the tables from the database are not. The database I scripted did not contain actual data, i.e., there were no 'Insert' statements. Is this last the reason why the tables are not listed?

I tried to see if the tables were stored somehow without appearing by running an insert into statement for one of the tables …

sql-server sql-server-2012

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

SET IDENTITY_INSERT OFF - 导致表锁定

我在如下所示的数据库上执行 SQL:

SET IDENTITY_INSERT table1 ON
GO
BEGIN TRANSACTION
GO
INSERT INTO table1 SELECT ... FROM table2
GO
DELETE FROM table2 ...
GO
COMMIT TRANSACTION
GO
SET IDENTITY_INSERT table1 OFF
GO
Run Code Online (Sandbox Code Playgroud)

问题是我的表被锁定在最后一条语句上SET IDENTITY_INSERT table1 OFF,之前的所有语句大约需要 6 个小时,但我的表现在被锁定在最后一条语句上 1 天。

在活动监视器中,它具有不执行任何命令的连接,但它是锁定链的头部阻塞器,我杀死了它,但没有任何改变,只是处于回滚状态,但它仍在消耗所有 I/O。

我的问题是这个会话在做什么以及如何避免它?由于某种原因,看起来 IDENTITY_INSERT 几乎像全表娱乐一样昂贵,我不知道这会如何导致性能方面的任何缺点。

附加信息:插入期间没有身份冲突,bcs i insert 操作的身份值低于 table1 上的初始设置

餐桌设计:

CREATE TABLE [dbo].[table1] (
    [id_table1] BIGINT     IDENTITY NOT NULL,
    [id_table3]              INT        NOT NULL,
    [some_id]    BIGINT     NOT NULL,
    [some_time2]           DATETIME2   NOT NULL,
    [some_time]            DATETIME2   NOT NULL,
    [some_value]                FLOAT …
Run Code Online (Sandbox Code Playgroud)

sql-server identity

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

创建每月作业以从 SQL Server 2014 导出到 Excel

这里有很多问题询问“如何从 SQL Server 导出到 Excel”,但是每个答案以及我知道的东西都给我带来了问题(这里是 64 位系统)。

我们有一个开发人员每月运行 6 次查询(从 2010 年、2011 年等更改年份)。然后,他将结果复制并粘贴到 Excel 电子表格中。

我在将这些数据从 SQL Server 2014 导出到 Excel 时遇到问题。

这是查询:

SELECT 
R.numero,
R.ano,
R.data 'data abertura',
R.datahora_conclusao  'data conclusão',
R.datahora_emissao 'data emissão',
S.[status],
(ins.INSTITUTO +
            ' - ' + dir.DIRETORIA + 
            (CASE WHEN NOT nuc.NUCLEO IS NULL THEN  ' - ' + nuc.NUCLEO  ELSE '' END) +
            (CASE WHEN NOT equ.EQUIPE IS NULL THEN ' - ' + equ.EQUIPE ELSE '' END)) AS UNIDADE,
N.codigo 'codigo natureza …
Run Code Online (Sandbox Code Playgroud)

sql-server export excel sql-server-2014

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

Microsoft SQL Server AG 同步镜像不同步

我们正在升级到 SQL Server 2012 并决定我们希望将自己与用于节点 2 上的报告服务的复制分开。AG 和镜像看起来是一个很好的解决方案——我们采用了同步。还决定应用程序将写入节点 1,并从节点 2 读取以最大程度地减少数据争用。

编写了一个应用程序来插入数据,然后他们立即在节点 2 上检查他们插入的数据是否存在。

现在根据我的理解,AG 上的同步镜像应该接收请求,将数据发送到节点 2——节点 2 提交,然后告诉节点 1 完成,然后节点 1 返回给用户。

发生的事情根本不是——他们发送了数据,从节点 2 进行了检索——数据不匹配。错误。

我检查并仔细检查了设置,并让另一位一直使用 AG 和同步镜像的 DBA 查看了这些东西——我们最好的结论是,从我们看到的 Microsoft 的“同步”镜像来看,它不是同步的。有没有其他人看到这个?

sql-server mirroring availability-groups

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

查询 2 个表,一个有 1 行,另一个有多行

我有一个零件表:

ID,      Description
ABC-123  ABC
DEF-456  DEF
Run Code Online (Sandbox Code Playgroud)

我有一个用户定义的字段表,将信息存储在一行中。

ID,         DOCUMENTID, STRING_VAL,         DATE_VAL
UDF-000021, ABC-123,    TEXT123,            NULL
UDF-000022, ABC-123,    NULL,               6/10/2016
UDF-000023, ABC-123,    JOHN WORKING ON IT, NULL
UDF-000024, ABC-123,    NULL,               7/1/2016
UDF-000025, ABC-123,    YES,                NULL
UDF-000021, DEF-456,    TEXT123,            NULL
UDF-000022, DEF-456,    NULL,               6/10/2016
Run Code Online (Sandbox Code Playgroud)

我需要信息看起来像这样:

PART ID  DESCRIPTION    REVISION     REVISION DATE   NOTES    MARKUP DATE   IM
  -------------------------------------------------------------------------------
  ABC-123  ABC            TEXT123      6/10/2016       JOHN     7/1/2016      YES
  DEF0456  DEF            TEXT123      6/10/2016
Run Code Online (Sandbox Code Playgroud)

我看过连接、枢轴等,我想我似乎无法理解它。任何帮助是极大的赞赏。

sql-server group-by

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

sp_BlitzIndex - “无法将 null 值插入列 'index_sanity_id'...”

嗨,我在我的一台测试服务器上从最新版本的 sp_BlitzIndex 收到此错误消息:

数据库处理失败。无法将值 NULL 插入列“index_sanity_id”、表“tempdb.dbo.#IndexSanitySize_____________________________________________________________________________________00000002626F”;列不允许空值。插入失败。

sql-server sp-blitzindex

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

收集整个 SQL Server 实例的磁盘空间指标

我对 SQL Server 很陌生。我想收集整个 SQL Server 实例的数据库磁盘空间指标。

我找到了一个代码示例,可以收集每个数据库的磁盘空间信息。

IF OBJECT_ID('DISK.dbo.disk_activity') IS NOT NULL
    DROP TABLE disk_activity

CREATE TABLE disk_activity (
       servername NVARCHAR(100)
    ,  database_id INT PRIMARY KEY
    , name NVARCHAR(MAX)
    , data_used_size DECIMAL(18,2)
    , log_used_size DECIMAL(18,2)
)

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = STUFF((
    SELECT '
    USE [' + d.name + ']
    INSERT INTO DISK.dbo.disk_activity (servername, database_id, name, data_used_size, log_used_size)
    SELECT
          (SELECT @@SERVERNAME AS "Server Name") AS SERVER_NAME
        , DB_ID()
        , DB_NAME()
        , SUM(CASE WHEN [type] = 0 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server disk-space

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

SQL Server 2008:如何向数据库维护用户隐藏数据?

我们的组织聘请第三方公司对我们的数据库进行维护。老实说,目前他们充当我们的 DBA,因为我们没有 DBA。

为了进行维护工作,他们使用的是 SA 用户。

有没有办法让他们成为他们可以使用的新用户,在不实际查看数据的情况下执行所有管理操作。因此,他们可以看到所有表和列,但他们将无法看到任何行。

如果我遗漏了什么,请随时启发我,因为我的 DBA 知识相当贫乏。

database-design sql-server users

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