我正在尝试使用 3rd 方 SAP 附加组件帮助客户,该附加组件有发布故障并且已停止支持。
在某些情况下,它会将发帖队列表中未完成的帖子归档到发帖存档表。我需要将这些存档的结果移回队列中。
队列 ID 是一个身份列,我想保持不变。
问题是,如果我执行 identity_insert on/insert/identity_insert off,对于创建队列条目并期望自动生成标识列的进程的并发性,我可以期待什么?
任何有关演示此类行为的最佳方式的指针也将不胜感激。
目前,我正在比较两个包含独特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
我一直都知道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 Management Studio (SSMS) 为我的 SQL Server 2008 R2 创建了维护计划。
但是,我无法将其导出/转换为脚本,以防我需要在另一台服务器上重做。
有办法吗?
如果没有,是否有更新版本的 SQL Server 的方法?
假设,对于 SQLServer2008R2 及更高版本,具有完整恢复模式数据库。
我一直认为:
当一个事务被提交 (COMMIT) 时,该事务被写入 RAM 中的事务日志。
当 CHECKPOINT 发生时(在一段时间和/或一些事务和其他条件之后),最后一个 CHECKPOINT 和当前事务之间的事务被写入磁盘。
当 BACKUP LOG 发生时,数据将写入 MDF 文件。
我对么?我的一些同事说我错了,即使有 BOL 也很难找到正确的答案。
谢谢!
鉴于以下
-- 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) 我有大约 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 实例的连接证书(类似于某人检索 HTTP 证书的方式)?如果是这样,如何?
如果 SQL Server 客户端请求加密,则在允许加密连接之前必须验证服务器证书。开发服务器通常配置有自签名证书,在默认客户端设置下不会验证。
要使用自签名证书加密连接,请执行以下任一操作:
"TrustServerCertificate=true""ForceEncryption"为"yes"。后两个选项在每次建立连接时都会受到中间人攻击。第二,有些客户端不保存连接设置,因此必须为每个新连接重新设置。因此,最理想的解决方案是将证书添加到本地存储(最初需要做更多的工作,但之后是最简单和最安全的选择)。对于域中的用户,证书很容易分发,否则需要在每台计算机上手动安装证书。管理员可以通过直接发送或将其作为网络资源提供给每个用户来提供证书,但有时管理员可能因为其他原因太忙或无响应而无法提供证书。
在这种情况下,如果用户可以直接从 SQL 服务器获取证书将会很有用,就像可以使用浏览器或openssl s_client. 这在检索证书时仍然容易受到中间人攻击,但提供的窗口比每次有新连接时信任证书要窄得多。
考虑以下两个语句:
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 上相同。
我从一篇博客文章中得到了这个查询:
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
如果它是相关的,这里有一些其他服务器统计信息: