标签: sql-server-2016

临时表在没有时记录更改吗?

不幸的是,我没有准备好访问 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 文章中的临时表修改数据的文章,但在那里找不到任何指定此内容的内容。

sql-server temporal-tables sql-server-2016

9
推荐指数
1
解决办法
1076
查看次数

创建聚集列存储索引同时保持行顺序的代码

我想通过创建聚集列存储索引将行存储表转换为列存储表。表中有三列: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)

sql-server columnstore sql-server-2016

9
推荐指数
1
解决办法
2670
查看次数

COALESCE 现在可以交易了吗?

我的一位开发人员认为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)

index sql-server sql-server-2016

9
推荐指数
1
解决办法
1374
查看次数

JOIN FOR SYSTEM TIME 以列作为有效系统时间

想象一下,我有一个模式,其中包括ProductsOrders,和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)

sql-server temporal-tables sql-server-2016

9
推荐指数
1
解决办法
4727
查看次数

链接 SQL Server 有哪些重大限制?

我们的产品基于 Microsoft SQL Server。目前,我们使用了三个数据库,并且始终将它们部署在一个 SQL Server 实例上。

这三个数据库是OLTP、OLAP和审计。OLAP 数据库有大量来自 OLTP 和审计的 EOD 入站数据,使用跨数据库查询。

问题

如果我们将这三个数据库部署到单个物理服务器内的三个独立的标准版实例上,并使用 SQL Server 的链接服务器功能将它们绑定在一起:

  1. 它对应用程序代码有多透明?我应该期待多少变化?
  2. 到 OLAP 的入站数据为 50k-100k 行,每个 EOD 的有效负载为 200-500MB。我应该期望多少性能下降?
  3. 我应该期待哪些其他重大限制?

背景

目前,我们正在向拥有 500 多个并发用户的潜在客户进行宣传。

我们正在起草服务器规范,其中包括 64 个内核和 256GB RAM。为了让 SQL Server 能够利用所有这些丰富的资源,客户必须购买企业版,而对于 SQL Server 2016,它仅在基于每核的许可中可用。

我们担心仅许可成本(64 x 7400 美元)就会让他们失望。所以我想把数据库拆分成三个标准版的实例,并把它们链接在一起,希望链接功能对应用程序代码是透明的。

performance sql-server linked-server sql-server-2016

9
推荐指数
1
解决办法
1478
查看次数

SQL Server --&gt; Informix DB 链接服务器

经过大约 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 linked-server informix sql-server-2016

9
推荐指数
1
解决办法
8437
查看次数

无法确定元数据,因为语句调用了扩展存储过程

在 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 …

sql-server dynamic-sql jobs openrowset sql-server-2016

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

更改最大内存设置会使查询计划失效吗?

我最近将最大内存从默认(无限制)降低到 20 GB。这会清除计划缓存中最旧的查询吗?

sql-server memory configuration plan-cache sql-server-2016

9
推荐指数
1
解决办法
671
查看次数

分区表上的离线索引重建

如果我使用ntexttextimage数据类型对表进行分区并使用 重建单个分区上的索引online = off,这会锁定整个表还是仅锁定有问题的分区?

sql-server partitioning sql-server-2016

9
推荐指数
1
解决办法
1011
查看次数

如何在 SQL Server 中提示多对多连接?

我有 3 个“大”表,它们连接在一对列上(都是ints)。

  • 表 1 有大约 2 亿行
  • 表 2 有大约 150 万行
  • 表 3 有约 600 万行

每个表在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)

我尝试过的解决方案:

  • 在 上创建多列统计信息Key1Key2
  • 创建大量 …

join sql-server many-to-many sql-server-2016 cardinality-estimates

9
推荐指数
1
解决办法
1381
查看次数