Questions tagged «sql-server»

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

2
带有随机数和联接类型的意外结果
我有一个简单的脚本,该脚本获取四个随机数(1到4),然后重新加入以获取匹配的database_id数。当我使用LEFT JOIN运行脚本时,每次都会返回四行(预期结果)。但是,当我使用INNER JOIN运行它时,我得到的行数不尽相同-有时是两行,有时是八行。 从逻辑上讲,应该没有什么区别,因为我知道sys.databases中存在具有database_ids 1-4的行。并且由于我们从具有四行的随机数表中选择(而不是与之连接),因此返回的行数绝不能超过四行。 SQL Server 2012和2014中都会发生这种情况。是什么导致INNER JOIN返回不同数量的行? /* Works as expected -- always four rows */ SELECT rando.RandomNumber, d.database_id FROM (SELECT 1 + ABS(CHECKSUM(NEWID())) % (4) AS RandomNumber FROM sys.databases WHERE database_id <= 4) AS rando LEFT JOIN sys.databases d ON rando.RandomNumber = d.database_id; /* Returns a varying …
16 sql-server  t-sql 

3
网络延迟增加会导致MS SQL Server中的表锁定吗?
如果我要通过高延迟网络对SQL Server数据库进行一次调用,是否会由于该延迟而发生表锁定?假设我查询表A以获得某些记录,并且SQL Server必须通过慢速网络返回该数据-服务器通过网络发送响应时,表A上是否存在读取锁,或者在发送之前SQL Server是否释放了锁响应? 另外,答案是否会根据回应的大小而有所不同?如果它只需要返回几KB与几百MB,那会有所作为吗? 创建一个显式事务,运行查询并关闭该事务显然会导致表锁定,因为事务的持续时间与我的等待时间相关。

5
等待数据库引擎恢复句柄失败。检查SQL Server错误日志中是否存在潜在原因[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 2年前关闭。 我尝试安装SQL2008R2-SQL2012-sql2014 2014-07-17 16:31:16.00 spid14s Error: 17190, Severity: 16, State: 1. 2014-07-17 16:31:16.00 spid14s Initializing the FallBack certificate failed with error code: 1, state: 20, error number: 0. 2014-07-17 16:31:16.00 spid14s Unable to initialize SSL encryption because a valid certificate could not be found, and it is not …

1
是否需要担心ASYNC_NETWORK_IO等待类型?
在查看需要花费很长时间才能执行的存储过程的列表时,最引人注目的是它。但是,大多数等待时间(81%)是ASYNC_NETWORK_IO,我知道原因:存储过程传输大约400 MB的信息。 在文档中,它指出ASYNC_NETWORK_IO的原因是客户端无法跟上大量数据的流传,这可能是事实。我不确定如何使客户端保持同步,因为它所做的只是通过ADO.NET调用存储过程,然后仅处理数据集。 因此,鉴于此信息,我是否应该担心此过程的ASYNC_NETWORK_IO等待类型?它实际上对服务器性能有影响吗? 其他信息: 我正在使用SQL Server 2005的Service Pack 2。 客户端应用程序与SQL Server位于同一盒子上(我知道,我知道...但是我对此无能为力)。


4
SQL Server 2008 R2错误:15023,用户,组或角色已经存在
我的测试数据库存在权限问题。 我无法访问报告数据库,应用程序的帮助文档说要执行以下操作: Resolution: 1. Launch the SQL Server Management Studio and connect to the database server(s) hosting the Vision and Reporting Server databases. 2. Expand the security folder. 3. Select logins and right click on the <username> user and choose properties. 4. Click the User Mapping tab 5.Make sure the …

2
SQL Server 2012将备份还原到新的数据库名称
我似乎还记得,在2008年,您可以通过更改restore-wizard中“ Destination Database”字段中的名称来将备份还原到数据库的新副本。它将创建一个全新的数据库,该数据库是还原到所需时间点的原始数据库的副本。我一辈子都没有想过如何使SQL 2012做到这一点。 现在,我了解到(感谢Aaron Bertrand)这并没有真正改变,而2012年实际上让我更清楚地看到,这种策略首先是一个坏主意! 因此,我需要做的是:使用备份数据库从现有数据库“ MyDB”创建一个新数据库“ MyDB_Copy”。我们有每晚的完整备份(.bak)和每15分钟的TLogs(.trn)。我根本不希望现有的“ MyDB”受到影响/触动,因为它是“实时的”。 从主要的完整备份文件创建MyDB_Copy之后,我需要还原几十个TLog备份以使其到达某个时间点。

4
如何中断SQL脚本执行
我正在使用sql脚本,如果不满足某些条件,我有停止继续执行脚本的要求。 当我用Google搜索它时,我发现RaisError严重性级别为20会终止它。但是由于某些原因,我无法使用该选项。 能否请我提供停止SQL脚本执行的替代方法。

1
SQL Server nvarchar(max)vs nvarchar(n)影响性能
这是SQL Server 2008 R2 SP2。我有2张桌子。两者是相同的(数据和索引),除了第一个表的VALUE列nvarchar(max)与第二个表的列相同nvarchar(800)。该列包含在非聚集索引中。我还在两个表上创建了聚集索引。我还重建了索引。此列中的最大字符串长度是650。 如果我对两个nvarchar(800)表运行相同的查询的速度始终更快,那么很多倍。当然,这似乎正在破坏“ varchar”的目的。表格包含800,000多行。该查询应查看大约110,000行(这是该计划的估计值)。 根据io统计信息,没有lob读取,因此所有内容似乎都在行中。执行计划是相同的,除了两个表之间的开销百分比略有不同,并且估计的行大小更大时nvarchar(max)(91字节对63字节)。读取次数也几乎相同。 为什么会有所不同? =====架构====== CREATE TABLE [dbo].[table1]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [ProductID] [bigint] NOT NULL, [ProductSkeletonID] [bigint] NOT NULL, [Value] [nvarchar](max) NOT NULL, [IsKeywordSearchable] [bit] NULL, [ValueInteger] [bigint] NULL, [ValueDecimal] [decimal](18, 2) NULL, [ValueDate] [datetime] NULL, [TypeOfData] [nvarchar](20) NOT NULL, CONSTRAINT [PK_table1] PRIMARY …

3
重设IDENTITY值
我有一个带有IDENTITY列的表。在开发时,我会不时删除这些行,然后再次添加它们。但是,当我再次添加IDENTITY值时,它们始终保持增加,并且不是从1开始。现在我的ID是从68-> 92,这使我的代码崩溃。 如何重置IDENTITY值?

7
使用WITH REPLACE还原备份时出现错误3154
我的计算机上安装了SQL 2012 SP1。我备份了一个数据库test.bak。 我有一个名称test2相同的数据库,但是数据已更改。 我想test.bak通过test2数据库还原。 我总是收到错误: 错误3154:备份集保存现有数据库以外的数据库的备份。 我试过了: 我右击 test2 -> Restore database -> From device 我选择test.bak并检查了With Replace但出现错误。 然后我尝试右键单击 test2 -> Restore file and filegroups 我选择test.bak并检查了With Replace但出现错误。 我可以删除旧数据库,然后使用正确的名称还原备份,但是当我使用SQL 2008时,在现有数据库上进行还原没有问题。 似乎因为我使用SQL2012,所以我经常收到此错误!

2
如何避免在WHERE子句中使用变量
给定一个(简化的)存储过程,例如: CREATE PROCEDURE WeeklyProc(@endDate DATE) AS BEGIN DECLARE @startDate DATE = DATEADD(DAY, -6, @endDate) SELECT -- Stuff FROM Sale WHERE SaleDate BETWEEN @startDate AND @endDate END 如果Sale表很大,则SELECT可能要花很长时间才能执行,这显然是因为优化器由于局部变量而无法优化。我们测试了SELECT使用变量运行零件,然后对日期进行了硬编码,执行时间从〜9分钟缩短至〜1秒。 我们有许多存储过程可根据“固定”日期范围(周,月,8周等)进行查询,因此输入参数仅为@endDate,而@startDate是在过程内部计算的。 问题是,避免在WHERE子句中使用变量以免损害优化程序的最佳实践是什么? 下面显示了我们提出的可能性。这些最佳实践中的任何一种还是其他方法? 使用包装程序将变量转换为参数。 参数不会像局部变量那样影响优化器。 CREATE PROCEDURE WeeklyProc(@endDate DATE) AS BEGIN DECLARE @startDate DATE = DATEADD(DAY, -6, @endDate) EXECUTE DateRangeProc @startDate, @endDate END …


2
临时表中的varchar大小重要吗?
在我妻子的工作中,关于仅对存储过程中的临时表中的varchar(255)所有varchar字段使用都存在争议。基本上,一个营地希望使用255,因为即使定义更改,它也将始终有效,而另一个营地则希望坚持使用源表中的大小以提高性能。 表演营对吗?还有其他含义吗?他们正在使用SQL Server。

3
SQL Server NTFS分配单位大小
在运行SQL Server 2008 R2的Windows 2008 R2上,NTFS分配单元大小对DISK IO性能的影响至关重要。在我看来,为任务关键型应用构建少量服务器的服务器管理员将NTFS分配单位大小(群集大小)保留为默认4 KB而不是64 KB。SQL服务器已安装。 是否值得付出痛苦-卸载SQL-用64 KB群集大小格式化驱动器并重新安装SQL Server?

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.