Questions tagged «sql-server-2012»

SQL Server 2012(主要版本11.00.xxxx)。还请标记sql-server。

1
顺序-NO CACHE vs CACHE 1
在SQL Server 2012+中,SEQUENCE声明使用NO CACHE和声明使用之间有区别CACHE 1吗? 顺序1: CREATE SEQUENCE dbo.MySeqCache1 AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE CACHE 1; GO 顺序2: CREATE SEQUENCE dbo.MySeqNoCache AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE NO CACHE; GO 两者之间有什么区别吗?在SQL Server 2012+环境中使用时,它们的行为会有所不同吗?

3
样本大小的异常行为可用于统计信息更新
我一直在研究抽样阈值,并使用SQL Server(2012)的统计信息更新,并注意到一些奇怪的行为。基本上,在某些情况下,即使使用相同的数据集,采样的行数似乎也有所不同。 我运行此查询: --Drop table if exists IF (OBJECT_ID('dbo.Test')) IS NOT NULL DROP TABLE dbo.Test; --Create Table for Testing CREATE TABLE dbo.Test(Id INT IDENTITY(1,1) CONSTRAINT PK_Test PRIMARY KEY CLUSTERED, TextValue VARCHAR(20) NULL); --Insert enough data so we have more than 8Mb (the threshold at which sampling kicks in) INSERT INTO …

3
与替代整数键相比,自然键在SQL Server中提供的性能更高还是更低?
我是代理键的粉丝。我的发现存在确认偏倚的风险。 我在这里和http://stackoverflow.com上看到的许多问题都使用自然键而不是基于IDENTITY()值的替代键。 我在计算机系统方面的背景告诉我,对整数执行任何比较运算都比比较字符串快。 该评论使我质疑我的信念,因此我认为我将创建一个系统来研究我的论点,即在SQL Server中用作键的整数比字符串快。 由于小型数据集之间的区别可能很小,因此我立即想到了两个表的设置,其中主表具有1,000,000行,而辅助表在主表中的每一行有10行,总共有10,000,000行。辅助表。我的测试的前提是创建两组这样的表,一组使用自然键,一组使用整数键,然后对一个简单的查询运行计时测试,例如: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Key = Table2.Key; 以下是我作为测试平台创建的代码: USE Master; IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1 BEGIN ALTER DATABASE NaturalKeyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE NaturalKeyTest; END GO CREATE DATABASE NaturalKeyTest ON …

2
最大用户连接数
在SQL Server 2012 Standard Edition中,我知道用户连接的最大数量为32,767。如果我朝着这个数字前进,我应该怎么做? 当前有30,000个用户连接,并且这个数字有望增加。

9
使用T-SQL测试字符串是否是回文
我是T-SQL的初学者。我想确定输入字符串是否是回文,如果不是,则输出= 0,如果是,则输出= 1。我仍然在弄清楚语法。我什至没有收到错误消息。我正在寻找不同的解决方案和一些反馈,以更好地理解和了解T-SQL的工作原理,并且变得更好-我仍然是一名学生。 正如我所看到的,关键思想是将最左边和最右边的字符相互比较,检查是否相等,然后将左边的第二个字符与最后一个的第二个字符进行比较,依此类推。我们做一个循环:如果字符彼此相等,我们继续。如果到达末尾,则输出1;否则,输出0。 您能否批评一下: CREATE function Palindrome( @String Char , @StringLength Int , @n Int , @Palindrome BIN , @StringLeftLength Int ) RETURNS Binary AS BEGIN SET @ n=1 SET @StringLength= Len(String) WHILE @StringLength - @n >1 IF Left(String,@n)=Right(String, @StringLength) SET @n =n+1 SET @StringLength =StringLength -1 RETURN @Binary …

2
'CONCAT'不是公认的内置函数名称
一位客户报告说他们正在SQL Server 2012上运行,我们在最终交付之前交付了一些测试查询以进行测试,但是: 'CONCAT'不是公认的内置函数名称。 我知道这CONCAT()是SQL Server 2012中引入的一个新的内置函数,它很好,但是我被要求回退我的更改以使此2008R2兼容,理由是“执行查询的用户可能无法具有执行Transact-SQL权限。” 因此,我只是想证明我的观点,即客户端最有可能在DEV中安装的SQL Server版本与在PROD中安装的SQL Server版本不同。 我找不到有关专门拒绝SELECT/EXECUTE内置标量值函数的权限的任何信息,但是是否可以,如果这样,用户仍然会收到相同的错误文本吗?

4
使用Windows身份验证时,SQL Server Management Studio连接缓慢或超时
尝试使用Windows身份验证通过TCP连接到SQL Server 2012实例时,SQL Server Management Studio 2014出现了非常长的延迟(10〜30秒)。连接对象资源管理器或新的空白查询窗口时,会发生这种情况。连接后,运行查询很快。当我使用SQL Server身份验证进行连接时,不会发生此问题。 环境: Windows 7,以域用户身份登录 通过IP地址的TCP连接(不是主机名) 服务器位于通过VPN连接的远程位置 没有加密 当我使用我的域帐户登录到同事的Windows 7计算机上并通过同一VPN连接到同一SQL Server时,没有延迟。当同一位同事使用自己的域帐户登录我的PC时,他遇到了延迟。这些测试表明问题是我的PC独有的。同样,仅当连接到此特定的SQL Server和VPN时,才会出现问题。我可以通过Windows身份验证立即连接到本地网络上的其他SQL Server。 我尝试过的没有成功的事情: 禁用的防病毒和防火墙 将“%userprofile%\ AppData \ Roaming \ Microsoft \ SQL Server Management Studio”下的“ 12.0”文件夹重命名为“ _12.0”,以强制SSMS重新创建我的用户设置。 将网络协议强制为TCP,而不是TCP <default>。我也尝试过命名管道,但是没有为此设置服务器。 安装了SSMS 2012,并尝试使用它而不是2014。 禁用的IPv6 在我的etc \ hosts文件中将Blackholed crl.microsoft.com更改为127.0.0.1。 在SSMS,Visual Studio和Windows中禁用了“客户体验改善计划”。 从我的PC上卸载所有与SQL Server相关的应用程序,仅在2012年重新安装。 TCPView线索: 使用TCPView,我注意到当我建立一个新的连接时,它的状态立即变为ESTABLISHED,但是随后又不断尝试与SQL Server建立一个或两个连接,并使用TIME_WAIT关闭它。在我同事的计算机上,这些连接已建立且牢固。因此,我很确定这是超时的根源,但是连接的目的是什么,为什么连接失败?(我的SSMS中没有任何插件。) …


2
SQL Server的READ COMMITTED SNAPSHOT与SNAPSHOT
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 6年前。 我正在研究SQL Server READ COMMITTED SNAPSHOT和SNAPSHOT隔离级别之间的差异,并且遇到了以下资源: 选择基于行版本控制的隔离级别 对于大多数应用程序,由于以下原因,建议使用行版本控制的读取提交隔离而不是快照隔离: 与快照隔离相比,它占用的tempdb空间更少。 快照隔离很容易受到更新冲突的影响,这些更新冲突不适用于使用行版本控制读取已提交的隔离。当在快照隔离下运行的事务读取数据,然后由另一个事务修改该数据时,快照事务对同一数据的更新将导致更新冲突,并且该事务终止并回滚。使用行版本控制的读取提交隔离不是问题。 我对这些主题有些陌生,但是我似乎无法理解上面链接中的两个要点。 对于这些模式,为什么tempdb空间会有所不同?一个存储比另一个存储更多的粒度版本吗? 为什么快照隔离更容易受到更新冲突的影响?

5
如何使SSMS大写关键字
我最近使用Management Studio 2012在使用MySQL工作台开始,一个方便的功能是,我可以留在所有情况下和任何保留字(如SELECT,INSERT)将自动转换为大写。如何在SSMS中复制此行为?

1
为什么0等于空字符串?
我需要一些帮助来查找为什么以下T-SQL语句返回1(true): SELECT IIF( 0 = '', 1, 0) 我猜有人更改了ANSI选项SET ANSI_NULLS或其他导致行为的选项。 我的问题是我要加入一些值,而在最后一行中,我有由0和''值相连的值,这是不正确的。

1
重建索引时何时使用sort_in_tempdb?
我们正在讨论是否对DW表使用SORT_IN_TEMPDB选项。我的理解是,使用此选项时会有更多的写入,尽管它们的顺序更大。我们有一个SAN(众所周知,它有时速度很慢),因此在我们的情况下,我们希望尽可能地限制写入次数。我相信tempdb位于单独的LUN(磁盘集)上。 我们的数据文件和tempdb文件中都有足够的磁盘空间。在这种情况下,我们可以从使用SORT_IN_TEMPDB中受益吗? 令我震惊的是对此答案的评论 重建索引时,您将需要索引空间的两倍+ 20%进行排序。因此,通常来说,要重建数据库中的每个索引,您只需要数据库中最大索引的120%。如果您使用SORT_IN_TEMPDB,则只能赢20%,您的数据文件中仍然需要100%的附加收入。此外,在tempdb中使用sort会大大增加您的IO负载,因为您现在不再将索引一次写入数据文件,而是一次将其写入tempdb,然后再将其写入数据文件。因此,这并不总是理想的。 我们绝对不希望通过慢速/可能配置错误的SAN增加IO负载。 最好的测试方法是什么?通过简单地重建带有和不带有该选项的表并记录时间? 编辑:我们有8个tempdb文件,每个15GB。我们确实设置了TF 1117/1118标志,并且启用了IFI。当前,我们使用sort_in_tempdb选项(不带该选项)进行混合重建。 谢谢! SQL Server 2012企业版

1
为什么SQL Server 2012 Express在服务器上使用9.5GB的RAM?
我正在构建一个计划将SQL Server 2012 Express嵌入为主要数据存储的应用程序。在我的开发机(带有3GB RAM的Win7-32​​)上进行测试时,我从未观察到该sqlservr.exe进程使用超过1GB的RAM,正如我从发布的SQL Server Express版的硬件扩展限制中所期望的那样。 然后,我将应用程序移动到服务器级计算机(具有16GB RAM的Win Server 2008R2 64位)上以评估其性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约9.5GB RAM并停留在那里。 我重新启动了几次,以查看是否有效果,但是每次,该过程迅速恢复到约9.5GB。现在,我当然很高兴SQL Server Express使用我的RAM,但是我想知道这是否是预期的行为,这样我就不会再依赖基于不正确的RAM使用情况的性能级别了。 仅供参考,根据我的说法SELECT @@VERSION,服务器计算机上SQL Server的版本为: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 我的9.5GB号码来自任务管理器中的“私人工作集”号码。来自DBCC memorystatus(尽管在现在处于空闲状态的服务器上)输出的第一张表如下: …

4
有没有一种方法可以在TSQL中生成表创建脚本?
有没有一种方法可以完全通过T-SQL从现有表中生成创建脚本(即不使用SMO,因为T-SQL无法访问SMO)。假设一个存储过程接收一个表名并返回一个包含给定表的创建脚本的字符串? 现在,让我描述一下我所面临的情况,因为可能有不同的方法来解决这个问题。我有一个包含数十个数据库的实例。这些数据库都具有相同的架构,所有相同的表,索引,等等。它们是作为第三方软件安装的一部分创建的。我需要一种与他们合作的方式,以便可以以临时方式汇总来自他们的数据。dba.se的好人已经在这里为我提供了帮助。如何在其他数据库中创建触发器? 当前,我需要找到一种从所有数据库的表中进行选择的方法。我已将所有数据库名称记录到一个名为的表中,Databasees并且编写了以下脚本以对所有数据库名称执行select语句: IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp select * into #tmp from Database1.dbo.Table1 where 1=0 DECLARE @statement nvarchar(max) = N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1' DECLARE @LastDatabaseID INT SET @LastDatabaseID = 0 DECLARE @DatabaseNameToHandle varchar(60) DECLARE @DatabaseIDToHandle int SELECT TOP …

1
为什么CREATE INDEX…WITH ONLINE = ON会在几分钟内阻止对表的访问?
我有一个现有表: CREATE TABLE dbo.ProofDetails ( ProofDetailsID int NOT NULL CONSTRAINT PK_ProofDetails PRIMARY KEY CLUSTERED IDENTITY(1,1) , ProofID int NULL , IDShownToUser int NULL , UserViewedDetails bit NOT NULL CONSTRAINT DF_ProofDetails_UserViewedDetails DEFAULT ((0)) ); 该表有150,000,000行。系统以24x7x365运行,因此没有定期发生的维护时段。 我想向表添加索引,并且使用SQL Server企业版,我应该能够做到这一点而不会阻止对表的写访问。我使用的命令是: CREATE INDEX IX_ProofDetails_ProofID_Etc ON dbo.ProofDetails (ProofID, IDShownToUser) INCLUDE (UserViewedDetails) WITH (ONLINE=ON , ALLOW_ROW_LOCKS=ON , …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.