标签: sql-server

IDENTITY_INSERT 如何影响并发?

我正在尝试使用 3rd 方 SAP 附加组件帮助客户,该附加组件有发布故障并且已停止支持。

在某些情况下,它会将发帖队列表中未完成的帖子归档到发帖存档表。我需要将这些存档的结果移回队列中。

队列 ID 是一个身份列,我想保持不变。

问题是,如果我执行 identity_insert on/insert/identity_insert off,对于创建队列条目并期望自动生成标识列的进程的并发性,我可以期待什么?

任何有关演示此类行为的最佳方式的指针也将不胜感激。

sql-server-2005 sql-server insert identity

12
推荐指数
1
解决办法
3078
查看次数

在 SQL 中比较两个大型数据集的有效方法

目前,我正在比较两个包含独特StoreKey/ProductKey组合的数据集。

第一个数据集具有StoreKey/ProductKey2012 年 1 月开始到 2014 年 5 月结束之间的唯一销售组合(结果 = 450K 行)。第二个数据集具有独特的StoreKey/ProductKey组合,销售从 2014 年 6 月开始,直到今天(结果 = 190K 行)。

我正在寻找StoreKey/ProductKey属于第 2 组但不在第 1 组的组合 - 即从 6 月初开始销售的新产品。

到目前为止,我已将两个数据集转储到临时表中,为两个表的两个键创建索引,并使用该EXCEPT语句查找唯一项。

比较如此大的数据集的最有效方法是什么?有没有更有效的方法来进行这种大型比较?

performance sql-server sql-server-2008-r2 except query-performance

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

Transact-SQL 中的对称差分运算?

我一直都知道UNIONSQL 中的运算符,但直到最近才发现还有其他的集合运算符,INTERSECT和EXCEPT. 我一直无法找到执行第四大集合运算符的运算符,即对称差异(例如 . 的相反INTERSECT)

看起来我可以通过使用类似的东西来获得所需的输出

SELECT Field FROM A UNION SELECT Field FROM B 
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
Run Code Online (Sandbox Code Playgroud)

(假设我得到了正确的优先级),或者通过做一个反完全连接:

SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
Run Code Online (Sandbox Code Playgroud)

但是这两个看起来都像是相当密集的查询,尤其是与其他三个基本的集合操作相比。SQL中是否存在对称差异操作而我在文档中找不到它?或者是否有一种“规范”的方式在 T-SQL 中实现它?

sql-server t-sql

12
推荐指数
1
解决办法
3858
查看次数

编写维护计划脚本

我使用 SQL Server Management Studio (SSMS) 为我的 SQL Server 2008 R2 创建了维护计划。

但是,我无法将其导出/转换为脚本,以防我需要在另一台服务器上重做。

有办法吗?

如果没有,是否有更新版本的 SQL Server 的方法?

sql-server sql-server-2008-r2 maintenance-plans

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

CHECKPOINT 或 COMMIT 写入磁盘?

假设,对于 SQLServer2008R2 及更高版本,具有完整恢复模式数据库。

我一直认为:

  1. 当一个事务被提交 (COMMIT) 时,该事务被写入 RAM 中的事务日志。

  2. 当 CHECKPOINT 发生时(在一段时间和/或一些事务和其他条件之后),最后一个 CHECKPOINT 和当前事务之间的事务被写入磁盘。

  3. 当 BACKUP LOG 发生时,数据将写入 MDF 文件。

我对么?我的一些同事说我错了,即使有 BOL 也很难找到正确的答案。

谢谢!

sql-server

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

Switching Data In Fails with“允许目标表上的检查约束或分区函数不允许的值”

鉴于以下

-- table ddl
create table dbo.f_word(
    sentence_id int NULL,
    sentence_word_id int NULL,
    word_id int NULL,
    lemma_id int NULL,
    source_id int NULL,
    part_of_speech_id int NULL,
    person_id int NULL,
    gender_id int NULL,
    number_id int NULL,
    tense_id int NULL,
    voice_id int NULL,
    mood_id int NULL,
    case_id int NULL,
    degree_id int NULL,
    citation nvarchar(100) NULL
);
-- create partition function
create partition function pf_f_word_source_id (int)
as range left for values 
(
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,
    15,16,17,18,19,20,21,22,23
);

-- create the partition scheme
create partition scheme ps_f_word …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning sql-server-2014

12
推荐指数
1
解决办法
4724
查看次数

高效传输大量(8400 万行)数据

我有大约 8400 万行。其中所有这些都需要转移到同一服务器上的单独数据库中,然后我删除以从源数据库中删除大约 6000 万行。

8400 万行都在同一个表中。仅该表就占了整个数据库的 90%。

所以... 来源:8400 万行 -> 2400 万行目标:0 行 -> 8400 万行

源正在运行完全恢复模式,目标将运行简单。

我想知道最有效的方法是什么?

方案一:

1) 插入目标 SELECT * FROM 源

2) 截断来源

3) INSERT INTO source SELECT * FROM destination WHERE keep_condition = 1

方案B:

1) 将源数据库的备份恢复为目标数据库

2) 删除除目标数据库上需要的表之外的所有表

3) 截断来源

4) INSERT INTO source SELECT * FROM destination WHERE keep_condition = 1

计划C:

1) 插入目标 SELECT * FROM 源

2) DELETE source WHERE keep_condition = 0

或者是其他东西?

谢谢

sql-server

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

客户端如何检索 SQL Server 公共 SSL 证书?

用户能否检索 SQL Server 实例的连接证书(类似于某人检索 HTTP 证书的方式)?如果是这样,如何?

语境

如果 SQL Server 客户端请求加密,则在允许加密连接之前必须验证服务器证书。开发服务器通常配置有自签名证书,在默认客户端设置下不会验证。

要使用自签名证书加密连接,请执行以下任一操作:

  • 证书必须添加到本地存储
  • 客户端必须设置 "TrustServerCertificate=true"
  • 客户端不得请求加密,服务器必须设置"ForceEncryption"为"yes"。

后两个选项在每次建立连接时都会受到中间人攻击。第二,有些客户端不保存连接设置,因此必须为每个新连接重新设置。因此,最理想的解决方案是将证书添加到本地存储(最初需要做更多的工作,但之后是最简单和最安全的选择)。对于域中的用户,证书很容易分发,否则需要在每台计算机上手动安装证书。管理员可以通过直接发送或将其作为网络资源提供给每个用户来提供证书,但有时管理员可能因为其他原因太忙或无响应而无法提供证书。

在这种情况下,如果用户可以直接从 SQL 服务器获取证书将会很有用,就像可以使用浏览器或openssl s_client. 这在检索证书时仍然容易受到中间人攻击,但提供的窗口比每次有新连接时信任证书要窄得多。

sql-server ssl

12
推荐指数
1
解决办法
4527
查看次数

CONVERT() 出现此问题的原因是什么?

考虑以下两个语句:

PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0);
PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0);
Run Code Online (Sandbox Code Playgroud)

两个语句都返回-1;这不是不正确,因为第二个二进制值比第一个值高 65,536 十进制,不是吗?

这肯定不是由于无声截断?

如果我运行以下语句:

PRINT CONVERT(NUMERIC(38, 0),   0x00000001, 0);
PRINT CONVERT(NUMERIC(38, 0),   0x00010001, 0);
Run Code Online (Sandbox Code Playgroud)

我遇到了以下错误:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varbinary to numeric.
Run Code Online (Sandbox Code Playgroud)

我如何诊断这里发生了什么?

我在 SQL Server 2012 v11.0.5058 上运行它。结果在 SQL Server 2008 R2 SP2、SQL Server 2005 和 SQL Server 2000 上相同。

sql-server-2008 sql-server sql-server-2012

12
推荐指数
1
解决办法
2045
查看次数

9990 的“缓冲区缓存命中率”是什么意思?

我从一篇博客文章中得到了这个查询:

SELECT object_name, counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Buffer Manager%'
AND [counter_name] = 'Buffer cache hit ratio'
Run Code Online (Sandbox Code Playgroud)

帖子说它会给我一定比例的缓存命中率。它似乎表明它将是一个 0-100 的值(它显示的结果为 87)。

但是当我运行它时,我得到了非常高的数字。下面是一个例子:

object_name               counter_name             cntr_value  
SQLServer:Buffer Manager  Buffer cache hit ratio   9990
Run Code Online (Sandbox Code Playgroud)

这是否意味着 99.90%?

如果不是,那是什么意思?我怎样才能得到真正的价值?

注意:我得到的值低至257,高至352363

如果它是相关的,这里有一些其他服务器统计信息:

  • 页面预期寿命:145
  • 页面读取/秒:1,380,009,009

performance sql-server sql-server-2012

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