不幸的是,我没有准备好访问 SQL 2016 实例来测试这个。如果我有一个具有以下架构的时态表:
create table blah (
foo int identity(1,1),
baa int
)
Run Code Online (Sandbox Code Playgroud)
我要运行以下语句:
update blah set baa = baa
Run Code Online (Sandbox Code Playgroud)
它会像我实际更新数据一样记录更改吗?
我已经查看了MSDN 文章中的临时表和修改数据的文章,但在那里找不到任何指定此内容的内容。
我想通过创建聚集列存储索引将行存储表转换为列存储表。表中有三列:id、time 和 value。
该表在创建列存储索引之前按 id 和时间排序;但是,在创建列存储索引后,行顺序混乱了。我认为这可能是由于并行性并添加了maxdop = 1选项,但这并没有解决问题。谁能帮我这个?
这是创建表和索引的代码:
-- creating rowstore table
drop table if exists tab1_rstore
select id, time, value
into tab1_rstore
from tab0
order by id_loan, period
option(maxdop 1)
-- creating clustered index on rowstore table
create clustered index idx on tab1_rstore (id,time)
-- creating columnstore table
select *
into tab1_cstore
from tab1_rstore
option(maxdop 1)
-- comparing the first two rows from these two tables
select top 2 *
from tab1_rstore
select top 2 * …Run Code Online (Sandbox Code Playgroud) 我的一位开发人员认为COALESCE(column, default value) = default value现在可以使用了。那正确吗?
我进行了以下测试,并认为这意味着这COALESCE是不可分割的。
USE tempdb;
SELECT @@VERSION;
-- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor)
CREATE TABLE Test
(
ID int primary key clustered,
Mod6 int null,
INDEX IX_Mod6 NONCLUSTERED (Mod6)
);
INSERT INTO Test (ID, Mod6)
SELECT object_id as ID, case when name like '%k%' then null else …Run Code Online (Sandbox Code Playgroud) 想象一下,我有一个模式,其中包括Products,Orders,和OrderLineItems,与Products作为一个系统版本态表。
架构:
CREATE TABLE dbo.Products
(
ProductID INT NOT NULL IDENTITY PRIMARY KEY,
Name nvarchar(255) not null,
SysStart DATETIME2 (7) GENERATED ALWAYS AS ROW START NOT NULL,
SysEnd DATETIME2 (7) GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME ([SysStart], [SysEnd])
)
WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE = dbo.Products_History, DATA_CONSISTENCY_CHECK = ON));
GO
CREATE TABLE dbo.Orders
(
OrderID int not null identity primary key,
OrderDate datetime2 (7) not null
);
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) 我们的产品基于 Microsoft SQL Server。目前,我们使用了三个数据库,并且始终将它们部署在一个 SQL Server 实例上。
这三个数据库是OLTP、OLAP和审计。OLAP 数据库有大量来自 OLTP 和审计的 EOD 入站数据,使用跨数据库查询。
如果我们将这三个数据库部署到单个物理服务器内的三个独立的标准版实例上,并使用 SQL Server 的链接服务器功能将它们绑定在一起:
目前,我们正在向拥有 500 多个并发用户的潜在客户进行宣传。
我们正在起草服务器规范,其中包括 64 个内核和 256GB RAM。为了让 SQL Server 能够利用所有这些丰富的资源,客户必须购买企业版,而对于 SQL Server 2016,它仅在基于每核的许可中可用。
我们担心仅许可成本(64 x 7400 美元)就会让他们失望。所以我想把数据库拆分成三个标准版的实例,并把它们链接在一起,希望链接功能对应用程序代码是透明的。
经过大约 3 天的尝试,我无法创建从 SQL Server 2016 到 Informix 11.5 的链接服务器。我没有在其他版本(2008R2 等)上尝试过这个,因为我想先在测试环境中设置连接。
我做了什么
1) 将 IBM Informix指令与 OLE DB 提供程序一起使用,在其中我收到以下错误(无论我是否在提供程序字符串中使用 DNS):
无法为链接服务器“UCCX”初始化 OLE DB 提供程序“Ifxoledbc”的数据源对象。链接服务器“UCCX”的 OLE DB 提供程序“Ifxoledbc”返回消息“EIX000: (-23197)”数据库区域设置信息不匹配”(Microsoft SQL Server,错误:7303)
DB Locale 是 en_US.57372
2)如本博客所述,使用 Microsoft OLE DB Provider for SQL Server返回错误:
命名管道提供程序:无法打开与 SQL Server 的连接。链接服务器 UCCX 的 OLE DB 提供程序 SQLNCLI11 返回消息“登录超时已过期” 链接服务器 UCCX …
在 sql server 2012 中,我曾经通过获取 SP_HELP_JOB 的输出来查看作业
-- https://www.sqlservercentral.com/Forums/Topic259078-8-1.aspx
-- getting data from sp_help_job into a temp table
-- marcelo miorelli
-- 01-april-2013
IF OBJECT_ID('TEMPDB..#JOBiNFO') IS NOT NULL
DROP TABLE #JobInfo
IF OBJECT_ID('TEMPDB..#ScheduleInfo') IS NOT NULL
DROP TABLE #ScheduleInfo
SELECT * INTO #JobInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes'
, 'set fmtonly off exec msdb.dbo.sp_help_job -- @execution_status=4')
SELECT * INTO #ScheduleInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes'
, 'set fmtonly off exec msdb.dbo.sp_help_schedule')
Run Code Online (Sandbox Code Playgroud)
现在在 sql server 2016 上这不起作用。
我收到此错误消息:
消息 11520,级别 16,状态 1,过程 sp_describe_first_result_set,第 1 …
我最近将最大内存从默认(无限制)降低到 20 GB。这会清除计划缓存中最旧的查询吗?
如果我使用ntext、text或image数据类型对表进行分区并使用 重建单个分区上的索引online = off,这会锁定整个表还是仅锁定有问题的分区?
我有 3 个“大”表,它们连接在一对列上(都是ints)。
每个表在Key1、上都有一个聚集索引Key2,然后还有一个列。Key1具有低基数并且非常偏斜。它总是在WHERE子句中被引用。条款中Key2从未提及WHERE。每个连接都是多对多的。
问题在于基数估计。每个连接的输出估计变小而不是变大。当实际结果达到数百万时,这导致最终估计值低至数百。
我有什么办法可以让 CE 做出更好的估计吗?
SELECT 1
FROM Table1 t1
JOIN Table2 t2
ON t1.Key1 = t2.Key1
AND t1.Key2 = t2.Key2
JOIN Table3 t3
ON t1.Key1 = t3.Key1
AND t1.Key2 = t3.Key2
WHERE t1.Key1 = 1;
Run Code Online (Sandbox Code Playgroud)
我尝试过的解决方案:
Key1,Key2join sql-server many-to-many sql-server-2016 cardinality-estimates
sql-server ×10
sql-server-2016 ×10
columnstore ×1
dynamic-sql ×1
index ×1
informix ×1
jobs ×1
join ×1
many-to-many ×1
memory ×1
openrowset ×1
partitioning ×1
performance ×1
plan-cache ×1