标签: sql-server-2014

当贡献列已经是唯一的时,计算列上的唯一索引

我有一个这样的表:

CREATE TABLE
  dbo.DiscountBarcodeList
(

  ID int NOT NULL IDENTITY
    CONSTRAINT PK_DiscountBarcodeList
    PRIMARY KEY CLUSTERED

, Discount int NOT NULL
    CONSTRAINT FK_DiscountBarcodeList_Discount
    FOREIGN KEY REFERENCES dbo.Discount (ID)

, CodeNumber int NOT NULL

, AssignedEntity int NULL
    CONSTRAINT FK_DiscountBarcodeList_AssignedEntity
    FOREIGN KEY REFERENCES dbo.Entity (ID)
    ON DELETE SET NULL

, BarcodeID AS
    CONVERT(
      char(10)
    , CAST(Discount AS binary(2)) + CAST(CodeNumber AS binary(3))
    , 2)

, CONSTRAINT UQ_DiscountBarcodeList_DiscountCodeNumber
    UNIQUE NONCLUSTERED 
    (
      Discount  ASC
    , CodeNumber ASC
    )

);
Run Code Online (Sandbox Code Playgroud)

该表将保存预先CodeNumber分配给 s 的 …

index sql-server sql-server-2014 unique-constraint computed-column

4
推荐指数
1
解决办法
203
查看次数

使用内存 OLTP 进行数据压缩

将已经data compression启用减少存储在内存中的OLTP表使用的金额是多少?

如果是,我认为 CPU 工作负载会增加。

sql-server compression sql-server-2014 memory-optimized-tables

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

SQL Server 2008 R2 Express 单 CPU 内核使用情况和升级到 SQL Server 2014 Express 的需要

在我们的办公室,我们使用安装在 Windows Server 2012 中的 SQL Server 2008R2 Express。SQL Server 数据库同时被网络中的 60 多个用户访问。最近几天,我们遇到了 SQL Server 和我们使用 SQL Server 的程序的性能下降。

从过去几年开始,我们使用 Windows Server 2003 和 SQL Server 2008 R2 Express。几个月后,我们将服务器更改为 Windows Server 2012。

我可以使用性能计数器等分析 SQL Server 的性能。但在此之前我想知道以下细节

  1. SQL Server 2008 R2 Express 是否有任何限制,例如它只使用一个 CPU 核心?这可能是性能缓慢的原因吗?

  2. 在 Windows Server 2012 上使用旧版本 (SQL Server 2008 R2 Express) 时是否存在兼容性问题?

  3. 是否需要升级到 SQL Server 2014 Express?我会得到什么好处吗?

performance sql-server sql-server-express windows-server sql-server-2014

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

sp_estimate_data_compression_savings 用于列存储压缩

有没有办法为列存储和列存储列存储归档压缩节省压缩?

为了检查这些压缩保存,我必须删除所有聚集和非聚集索引,然后创建一个聚集列存储索引 - 大多数时候这是一个耗时的操作,我想知道是否有其他方法可以做到这一点。

sql-server compression columnstore sql-server-2014

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

使用声明的变量时估计行非常错误

我正在非常非常错误的估计聚集索引寻求此查询的步骤(估计行是8637530;实际为74723):

Declare @StartDate as date = '10/1/2014';
Declare @EndDate as date = '10/2/2014';

select Sum(Quantity)
from Daily_GC_Items
where SalesDate between @StartDate and @EndDate;
Run Code Online (Sandbox Code Playgroud)

如果我对这样的日期使用字符串文字,则估计值几乎是完美的(估计行数为 75,337.4;实际为 74,723):

select Sum(Quantity)
from Daily_GC_Items
where SalesDate between '10/1/2014' and '10/2/2014'
Run Code Online (Sandbox Code Playgroud)

表定义:

[SalesDate] [date] NOT NULL,
[Store] [varchar](10) NOT NULL,
[GuestCheckNumber] [smallint] NOT NULL,
[ItemSequence] [smallint] NOT NULL,
[Quantity] [smallint] NOT NULL,
(Several more columns)
Run Code Online (Sandbox Code Playgroud)

首要的关键:

[SalesDate] ASC,
[Store] ASC,
[GuestCheckNumber] ASC,
[ItemSequence] ASC
Run Code Online (Sandbox Code Playgroud)

这种行为的可能原因是什么?

performance sql-server execution-plan sql-server-2014 cardinality-estimates query-performance

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

排序溢出和随机基数估计的阈值

我想测试 tempdb 溢出警告,所以我在 SQL Server 2014 上运行以下脚本:

USE tempdb

IF OBJECT_ID('tempdb..tblTest') IS NOT NULL DROP TABLE tblTest

CREATE TABLE tblTest
(
          c1 INT         PRIMARY KEY CLUSTERED,
          c2 INT        ,
          c3 CHAR (1000)
);

GO
SET NOCOUNT ON;

BEGIN TRANSACTION;

DECLARE @i AS INT;

SET @i = 1;

WHILE @i <= 10000
          BEGIN
                    INSERT  INTO tblTest (c1, c2, c3)
                    VALUES              (@i, @i, 'a');
                    SET @i = @i + 1;
          END

COMMIT TRANSACTION;

GO
UPDATE STATISTICS dbo.tblTest
GO
SET STATISTICS XML ON; …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization sorting sql-server-2014 query-performance

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

无法为链接服务器的 OLE DB 提供程序“SQLNCLI11”启动嵌套事务

我有两个链接的服务器,并且想要创建一个存储过程,该过程SELECT仅从第一台服务器的一个表中获取INSERT数据,并从第二个服务器中获取另一个表中的数据。

程序代码如下所示:

BEGIN TRAN

INSERT INTO [RI].[TEST_DB].[TEST_TABLE] (...)
SELECT ...
FROM [TABLE]

TRUNCATE [TABLE]

COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

链接服务器“RI”的 OLE DB 访问接口“SQLNCLI11”返回消息“无法在此会话上启动更多事务。”。
消息 7395,级别 16,状态 2,过程 usp_test,第 46 行
无法为链接服务器“RI”的 OLE DB 提供程序“SQLNCLI11”启动嵌套事务。
需要嵌套事务,因为 XACT_ABORT 选项设置为 OFF。

sql-server linked-server sql-server-2014

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

是否可以在 Windows 7 上安装 SQL Server 2014 Enterprise?

我计划在 64 位 HP 工作站上安装 SQL Server 2014 Enterprise Edition。

我阅读了以下软件和硬件要求:

根据该页面,企业版似乎不支持 Windows 7。参考正确吗?

sql-server installation sql-server-2014

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

DROP LOGIN 在 SQL Server 2014 上失败

我们有一个所有者为“dbowner”的数据库。我们的安装过程删除用户“dbowner”的登录名并重新创建它。

在任何其他版本的 SQL Server 上,以下 SQL 查询成功:

USE [master]
DROP LOGIN 'dbowner'
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 2014 上,相同的查询返回以下错误:

登录 'dbowner' 拥有一个或多个数据库。在删除登录之前更改数据库的所有者。

谁能解释为什么这在 SQL Server 2014 上会有所不同?删除登录适用于所有其他版本的 SQL Server(2005、2008 和 2012)。

是否有任何设置可以强制在 SQL Server 2014 上使用相同的设置?

更新:

我可以用一个使用 Windows 用户的例子来复制这个。有任何想法吗?

CREATE LOGIN [comp\winuser] FROM WINDOWS;
GO
CREATE DATABASE mydb;
GO
ALTER AUTHORIZATION ON DATABASE::mydb TO [comp\winuser];
GO
DROP LOGIN [comp\winuser];
GO
Run Code Online (Sandbox Code Playgroud)

更新 2:

谢谢您的意见。我同意删除所有者的登录名是不可取的(但除 SQL Server 2014 外,其他地方的 Windows 用户都可以使用)。然而,我们的安装脚本目前依赖于它,极其复杂的数据库安装过程是 15 年前某个人制作的(他不再与我们合作了)。如果可能(只要它有效),我们希望避免更改该领域。

在我看来,我们有三个选择:

  1. 使 SQL 2014 像以前的版本一样运行并保持脚本不变。我们更喜欢这个选项,我在这里发帖看看是否可以做到。
  2. 将所有者更改为其他用户,删除并创建所有者登录并将所有者移回。这是一个黑客,但可能会奏效。
  3. 改变我们处理用户的方式并停止放弃所有者的登录。这将是正确的方法,但也是最大的变化。

security sql-server users logins sql-server-2014

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

sql server 2014 无法连接微软账号或sa

我在我的盒子上运行 sql standard 2008 r2。并且它工作得很好。我刚刚在我的机器上安装了 sql server 2014 作为第二个实例。

该服务运行良好,但是当我尝试使用 sa 密码登录它时,我收到有关登录失败的错误消息。

假设我可能在安装时弄乱了密码,我卸载并重新安装。同样的问题。

奇怪的是,当我尝试使用 Windows 身份验证登录时,它也失败了

Windows 身份验证

Windows 身份验证失败

但是我可以使用 Windows 身份验证登录到我的 2008 R2 实例,没问题

有些东西困扰着我,它不一定是登录,但可能是服务的登录方式,但它的登录方式与 2008r2 服务完全相同。

服务

完整的错误信息在这里

Server Name: CRAIG-PC\MSSQLSERVER2014
Error Number: 18456
Severity: 14
State: 1
Line Number: 65536
Run Code Online (Sandbox Code Playgroud)

提前致谢


全屏抓取服务

服务 浏览器从此路径“C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe”运行

sql-server sql-server-2014

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