Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

4
SQL Server-实例名称和实例ID之间的区别
我对SQL Server实例有些困惑。实例名称和实例ID是不同的属性,但是实例ID倾向于默认使用实例名称的大写形式。通过安装,您可以为ID设置一个与名称不同的值,尽管通常它们是相同的。 显然,ID是指内部引用,名称是指用户友好的引用。但是两者之间的根本区别是什么?什么时候应该使用而不是另一个? 在通过自定义安装过程在客户的服务器计算机上部署/安装SQL Server 2008 R2 Express时,我需要了解这一点。
13 sql-server 

3
什么是SQL Server中的ERROR_STATE()?如何使用它?
我读到这ERROR_STATE()可以帮助区分源代码中可能发生相同类型错误的不同状态/位置。但是对我来说,真的不清楚如何使用它。 MSDN指出: ERROR_STATE() 返回导致运行TRY…CATCH构造的CATCH块的错误的状态号。 如何才能真正使用它?可以给我一个例子吗,本参考文章中提供的例子并不能帮助我很好地解释事情吗?

4
“ View Server状态”对安全性和性能的影响
该问题指出,各种DMV(动态管理视图)都需要“查看服务器状态”权限,但是我找不到任何关于您要做什么和不希望授予该权限的信息。 现在,我当然理解了“最低权限”,以及为什么不想将其授予任何人,但是我找不到有关如何评估是否应该授予它的指导。 因此,我的问题是:授予用户“查看服务器状态”权限对安全性和性能有何影响?他们该怎么做,也许不应该允许他们做... 更新:一种暗示是用户将能够使用DMV查看查询。如果查询或查询参数可以包含用户否则无法看到的机密信息,则允许VIEW SERVER STATE可以使他们这样做(即dob =或ssn =)。
13 sql-server 

4
“任务管理器”过程正在接管单用户模式的数据库。它是什么?
这是我对stackoverflow提出的问题的重复,但是我被告知,这里的某个人可能会对发生的事情有更好的了解。 我有一个零星的问题,当使用.NET SqlConnection在单用户模式下升级SQL Server时,某些其他应用程序在执行SQL代码时以某种方式登录到数据库中,并把我的过程踢了出去。SqlConnection不会以任何方式关闭或处置。但是某些其他应用程序最终以某种方式最终连接到数据库,这将我踢出连接。 运行sp_who时,我可以看到控制数据库的进程是Command =“ TASK MANAGER”。 任何人都可以告诉我这个过程是什么,它的目的是什么,以及它如何进入一个单用户模式且有活动连接的数据库?

1
我对Merge语句的锁定选项是什么?
我有一个执行MERGE语句的存储过程。 似乎在执行合并时默认情况下会锁定整个表。 我正在事务内调用此存储过程,在该事务中我还在做其他一些事情,但愿它只会锁定受影响的行。 我尝试了提示MERGE INTO myTable WITH (READPAST),但似乎锁得少了。但是ms doc中有一个警告,说它可以插入重复的键,甚至绕过主键。 这是我的表架构: CREATE TABLE StudentDetails ( StudentID INTEGER PRIMARY KEY, StudentName VARCHAR(15) ) GO INSERT INTO StudentDetails VALUES(1,'WANG') INSERT INTO StudentDetails VALUES(2,'JOHNSON') GO CREATE TABLE StudentTotalMarks ( Id INT IDENTITY PRIMARY KEY, StudentID INTEGER REFERENCES StudentDetails, StudentMarks INTEGER ) GO INSERT INTO …


4
无法创建SSISDB目录
尝试在sql server 2014集成服务中创建目录时出现以下错误。知道我在安装或其他地方错过了什么吗? 无法访问目录备份文件“ C:\ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ SSISDBBackup.bak”。确保数据库文件存在,并且SQL Server服务帐户能够访问它(Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)


6
操作系统返回错误21(设备未准备好。)
每次重新启动Windows时,对于某些数据库,都会出现此错误: 操作系统返回错误21(设备未准备好。) 我检查了磁盘chkdsk /r-没有坏扇区。 我执行DBCC CHECKDB没有错误: *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 如果我重新启动SQL Server,错误将消失。 Windows 10和SQL Server 2016 Express。

6
重建非常大的主键索引
我有一个托管在Azure上的SQL数据库。问题在于大小已失控,我可以在主键聚集索引中看到多达99%的碎片。 我能够使用online=onoption 重建所有其他索引,并且不会影响性能。PK聚簇索引之一的大小大于200GB,并且为此REBUILD...WITH (ONLINE=ON)导致锁定。 实际上,确实有来自所有时区的用户都在访问该网站,因此,我找不到可以离线重建索引的时间。 在不造成站点停机的情况下重建大型索引的最佳策略是什么? 我相信重组将无济于事,因为碎片化率为99%。问题在于该表即使在线也被锁定。主要问题是索引大于200GB。主键是一个整数。

2
使用来自SQL Server中另一个表的值更新表
我的数据库中有2个表。 表格1 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | address | birthdate | ------------------------------------------------------------------------- 表#2 ----------------------------------------- | gender | address | phone | birthdate | ----------------------------------------- 在表#1的列地址和PHONE2是空的和列性别和生日的值是相同的表#2。 我怎样才能读取表#2和更新数据的地址和PHONE2表#1的值从表#2 的地址和电话列时,性别和出生日期是各行中的一样吗? 例如:这是表#1中的一些数据 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 …

1
为什么这些类似的查询使用不同的优化阶段(事务处理与快速计划)?
此连接项中的示例代码 显示一个错误 SELECT COUNT(*) FROM dbo.my_splitter_1('2') L1 INNER JOIN dbo.my_splitter_1('') L2 ON L1.csv_item = L2.csv_item 返回正确的结果。但是以下内容返回的结果不正确(2014年使用新的Cardinality Estimator) SELECT (SELECT COUNT(*) FROM dbo.my_splitter_1('2') L1 INNER JOIN dbo.my_splitter_1('') L2 ON L1.csv_item = L2.csv_item) 因为它错误地将L2的结果加载到公共子表达式假脱机中,然后重播L1结果的结果。 我对为什么两个查询之间的行为差​​异感到好奇。跟踪标志8675显示工作的一个进入search(0) - transaction processing而失败的一个进入search(1) - quick plan。 因此,我认为其他转换规则的可用性是行为差异的背后原因(例如,禁用BuildGbApply或GenGbApplySimple似乎可以解决此问题)。 但是,为什么针对这些非常相似的查询的两个计划会遇到不同的优化阶段?根据我的阅读search (0),至少需要三个表,并且在第一个示例中肯定不满足该条件。

3
进行未提交的SET事务隔离级别的好处
我SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在大多数常规SQL查询中使用了大多数方法,主要是因为这是在最初学习该语言时钻到我身上的。 根据我的理解,此隔离级别的行为方式与WITH (NO LOCK)我曾经倾向于使用的方式相同SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED。 有没有时间我应该WITH (NO LOCK)用完SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED。 是否 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED阻止其他用户被锁定在我正在读取的表之外? 如果 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED用于停止锁,但是我仅在读取数据,那么使用它有什么意义?只是系统密集型查询会生成锁吗?在运行将在5到10秒内返回的查询时,是否值得使用它? 我被告知不要 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在读取将用于更新的数据时使用,大概是为了避免更新脏数据。这是唯一的原因吗? 对于我正在处理的数据库类型,有一个生产和测试环境。我们很少会查询生产环境,但是在需要时,通常会SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在查询中使用它。我知道这样做可能会导致脏读。除了接收可能不会最终提交给数据库的数据(因此将我的结果排除在外)之外,还有哪些其他类型的“脏读”是可能的? 很抱歉出现大量问题。

2
在将文件添加到tempdb的上下文中,热点是什么?
我试图找出是否有可能在不重新启动SQL Server服务的情况下将tempdb文件添加到SQL Server。我在数据库管理员那里看到了这个答案: Tempdb添加文件需要重新启动 一个答案指出: 添加-无需中断。尽管正如Microsoft的Sean指出的那样,SQL将更喜欢使用填充较低的文件。如果您要从1个数据文件开始添加更多数据,则SQL会在一段时间内使用新数据文件,但是您的性能不会比仅拥有一个文件更糟。但是,如果您已经有2个以上并添加一个以上,则它将在新的1个热点上出现并降低性能。 但是,有一条评论警告以下内容: 我将在“添加”部分添加一个附录:“添加:不,但是您很可能会失衡,所以您会发现热点,这会使情况变得更糟。” 我有关于该评论的以下问题,但被指示在我自己的新问题(此问题)中提出这些问题,而不是通过对该问题的答案中的评论来询问评论者。 特别: 什么是热点?(我通过Google获得了一些信息,但未详细添加文件后在tempdb上进行热点时会发生什么情况) 热点问题会使tempdb变得更糟吗? 数据库中哪些特定的事情会变得更糟?

4
将NVARCHAR(4000)列快速更改为NVARCHAR(260)
我在使用非常大的内存授予时遇到了一个性能问题,需要处理两NVARCHAR(4000)列该表。问题是这些列永远不会大于NVARCHAR(260)。 使用 ALTER TABLE [table] ALTER COLUMN [col] NVARCHAR(260) NULL 导致SQL Server重写整个表(并在日志空间中使用2倍的表大小),这是数十亿行,只能更改任何内容,这是不可行的。增大列宽不会出现此问题,但是减小它确实会出现此问题。 我尝试创建约束,CHECK (DATALENGTH([col]) <= 520)或者CHECK (LEN([col]) <= 260)SQL Server仍然决定重新编写整个表。 有什么方法可以将列数据类型更改为仅元数据操作?无需重写整个表?我正在使用SQL Server 2017(14.0.2027.2和14.0.3192.2)。 这是用于重现的示例DDL表: CREATE TABLE [table]( id INT IDENTITY(1,1) NOT NULL, [col] NVARCHAR(4000) NULL, CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED (id ASC) ); 然后运行ALTER。

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.