标签: sql-server

批量插入后外键变得不可信

在 SQL 2014 版服务器(12.0.2430.0 - 还没有 SP1)中,数据库处于 2012 兼容模式(正在努力将其切换到 2014...)我有一些外键对象,它们始终标记为not trusted在数据库中. 我在没有NOCHECK选项的情况下删除并重新创建了它们,但在 5-10 分钟内它们再次变得不受信任,如果我生成一个CREATE脚本,它会显示为:

ALTER TABLE [dbo].[Points]  WITH NOCHECK 
ADD  CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Run Code Online (Sandbox Code Playgroud)

正在使用的创建脚本是:

ALTER TABLE [dbo].[Points]
ADD  CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO

ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId]
GO
Run Code Online (Sandbox Code Playgroud)

没有复制,没有第三方工具,我正在监视数据库上的所有 DDL 语句,因此它不是另一个用户。

我能够很好地检查约束(WITH CHECK CHECK在每个约束上使用),但不久之后它们仍然不受信任。只有在凌晨运行的维护作业是 Ola 的,而且这种情况全天都在发生。

更新:

因此,经过几次跟踪以缩小可能性之后,似乎 aBULK INSERT可能会导致FK不可信。这个 msdn 问题指出这是密钥变得不受信任的有效途径,这是我第一次听说它。

所以我现在的问题是,是否有替代策略BULK INSERT可以保持外键 …

foreign-key sql-server sql-server-2014 bulk-insert

11
推荐指数
1
解决办法
4148
查看次数

概念 ERD 多表多对多,或者可能是递归的?

我正在创建一个概念图 [是的,我知道我已经包含了属性和键 - 但这只是让我在学习的同时巩固我正在做的事情] - 所以请把它当作概念性的,重点是关系和表格而不是如何绘制图表;)

我的障碍是: 我正在尝试确定对配置文件、位置和组织关系进行建模的最佳方式。

首先,规则:

  • One or more Profile's can be a Member/Friend of one or more Organizations; and vice versa.
  • One or more Profile's can be a Member/Friend of other Profiles.
  • One or more Organization's can be a Member/Friend of other Organizations.

在此处输入图片说明

Friend and Member differ, in that, Friends are like read-only and Members [depending on level] have full access to amend things.

更复杂的是,位置有自己的一套“进一步”细化规则,例如一个组织拥有两个位置,但根据位置规则,该组织的成员 [ …

erd database-design sql-server inheritance recursive

11
推荐指数
1
解决办法
1883
查看次数

“表达式 <=1.” 和有什么区别?和“表达式 <= 1”?

审查代码和案例陈述expression <= 1.<= 1

我不确定这样做的目的1.是什么。有什么想法吗?

sql-server

11
推荐指数
1
解决办法
1502
查看次数

SARG基数估计,为什么不是全扫描?

为什么没有全扫描(在 SQL 2008 R2 和 2012 上)?

测试数据:

DROP TABLE dbo.TestTable
GO  
CREATE TABLE dbo.TestTable
(
   TestTableID INT IDENTITY PRIMARY KEY,
   VeryRandomText VarChar(50),
   VeryRandomText2 VarChar(50)
)
Go
Set NoCount ON
Declare @i int
Set @i = 0
While @i < 10000
Begin
   Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2)
      Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 as VarChar(50)));
   Set @i = @i + 1;
End
Go
CREATE Index IX_VeryRandomText On dbo.TestTable
(
    VeryRandomText
)
Go
Run Code Online (Sandbox Code Playgroud)

执行查询时:

Select * From dbo.TestTable Where VeryRandomText = N'111' -- bad …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2008-r2 sql-server-2012 query-performance

11
推荐指数
1
解决办法
494
查看次数

HADR_SYNC_COMMIT 等待的奇怪案例

我们注意到HADR_SYNC_COMMIT我们环境中的一个有趣的等待模式。我们有一个三副本;数据中心中的一个主、一个同步辅助和一个异步辅助,我们刚刚在另一个数据中心(相距约 2400 英里)中添加了另外三个ASYNC副本。

从那以后,我们开始注意到HADR_SYNC_COMMIT等待的人数大幅增加。当我们查看活动会话时,我们会看到一堆COMMIT TRANSACTION查询在 SYNC 副本上等待

从截图中,我们可以清楚地看到HADR_SYNC_COMMIT6 月 29 日的等待时间有所增加,我们最终在 7 月 1 日中午的某个时间丢弃了远程数据中心的三个异步副本中的“两个”。这大大减少了等待时间。

图片

到目前为止我们检查过的内容 - 远程副本上的日志发送队列、重做队列、上次强化时间和上次提交时间。我们在工作时间有连续的小事务爆发,因此在给定的时间戳(60KB 到 1MB 之间的任何地方)发送队列非常小。
远程副本几乎同步,副本上任何单个 lsn 的上次提交时间和上次强化时间之间几乎没有差异。

网络管道是 10G,我们将传输缓冲区大小从 256 megs 修改为 2 gigs,这是在假设网络正在丢弃数据包并重新传输它们的情况下做出的;无论哪种方式,这似乎都没有多大帮助。

所以,我想知道ASYNC副本与HADR_SYNC_COMMIT等待有什么关系?SYNC副本不应该单独依赖于这种等待类型,我在这里遗漏了什么?

sql-server sql-server-2014

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

如何合并具有不同有效期的相似记录?

我正在处理的表包含三个组成部分:

  1. ID列(另一个表中的主键)
  2. 一些数据列
  3. 日期有效from/to列。

价值观:

ID   Data From        To  
1    a    2015-01-01  2015-01-05
1    a    2015-01-06  2015-01-10
1    b    2015-01-11  2015-01-15
1    a    2015-01-16  2015-01-20
2    c    2015-01-01  2015-01-05
2    c    2015-01-06  2015-01-10
Run Code Online (Sandbox Code Playgroud)

该表通过以某些时间间隔拍摄另一个数据源的“快照”并将有效日期分配给记录来更新。问题是这些快照会为在该时间间隔内根本没有更改的记录(具有不同的有效日期)创建重复条目。

我想通过查找具有连续日期的行并合并它们并为它们分配一个有效期来减小表的大小。例如:

ID   Data From        To  
1    a    2015-01-01  2015-01-10
1    b    2015-01-11  2015-01-15
1    a    2015-01-16  2015-01-20
2    c    2015-01-01  2015-01-10
Run Code Online (Sandbox Code Playgroud)

我目前的逻辑是:

  1. 按 ID、数据字段和“有效自”字段选择和排序所有行(因此它们在连续行的组中)。
  2. 使用游标比较相邻行的相似性。
  3. 如果它们相同,则合并行并更改有效期以包括两行。

我知道游标效率很低(我有一个很大的数据集),所以我正在寻找其他方法。

sql-server sql-server-2008-r2 gaps-and-islands

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

如果您不回滚事务,是否仍会进行更改?

说我正在运行一个查询

begin tran

update users
set name = 'Jimmy'
where name = 'john'
Run Code Online (Sandbox Code Playgroud)

如果我回滚事务,是否仍会进行这些更改,它会抛出错误还是会作为回滚?

sql-server

11
推荐指数
2
解决办法
6258
查看次数

是否可以使用 SQL Server 评估版开发 SSIS

我们正在考虑购买一个SQL Standard Server用于实现ETL via SSIS. 由于它对我们来说非常昂贵,我想在免费版本上测试开发 SSIS 包。由于 express 版本没有集成 SSIS 我想在 SQL Server 2014的Evaluation 180 Expires Version上尝试一下,但找不到任何关于

- Is it possible
- Are there limitations.
Run Code Online (Sandbox Code Playgroud)

有人可以在这里帮助我吗?

sql-server ssis

11
推荐指数
2
解决办法
8811
查看次数

如何回答为什么突然需要更改索引或查询

我是初级 DBA,有 3 年的经验。我们的工作是微调查询或建议开发人员应该重写特定代码或需要索引。

开发团队经常问的一个简单问题是:“昨天运行良好,突然发生了什么变化?” 我们将被要求检查基础设施方面。对任何问题的第一反应似乎总是将最大的责任归咎于基础设施,这始终是首先要验证的事情。

我们应该如何回答开发团队提出的“改变了什么”的问题?大家有遇到过同样的情况吗?如果是这样,请分享您的经验。

performance sql-server execution-plan

11
推荐指数
3
解决办法
879
查看次数

使用 ORDER BY 从不同表中选择 TOP 1 时如何设置索引视图

我正在努力在以下场景中设置索引视图,以便在没有两个聚集索引扫描的情况下执行以下查询。每当我为此查询创建索引视图然后使用它时,它似乎忽略了我放在它上面的任何索引:

    -- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++

    SELECT TOP 1 *
    FROM    dbo.TB_test1 t1
            INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1
    ORDER BY t1.somethingelse1
           ,t2.somethingelse2;


    GO
Run Code Online (Sandbox Code Playgroud)

表设置如下:

  • 两张桌子
  • 它们通过上面的查询通过内部连接连接起来
  • 并通过上面的查询从第一个表中的一列和第二个表中的一列排序;仅选择 TOP 1
  • (在下面的脚本中也有一些行来生成测试数据,以防万一它有助于重现问题)

    -- +++ TABLE SETUP +++
    
    CREATE TABLE [dbo].[TB_test1]
        (
         [PK_ID1] [INT] IDENTITY(1, 1)  NOT NULL
        ,[something1] VARCHAR(40) NOT NULL
        ,[somethingelse1] BIGINT NOT NULL
            CONSTRAINT [PK_TB_test1] PRIMARY KEY CLUSTERED ( [PK_ID1] ASC )
        );
    
    GO
    
    create TABLE [dbo].[TB_test2]
        (
         [PK_ID2] [INT] IDENTITY(1, …
    Run Code Online (Sandbox Code Playgroud)

index sql-server-2008 sql-server materialized-view index-tuning

11
推荐指数
1
解决办法
1245
查看次数