Questions tagged «sql-server»

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


4
SQL Server 2012还原向导冻结
我有一台带有SSMS Express 2012的开发笔记本电脑,带有2012数据库实例和2008数据库实例。已经使用此配置超过一年了。突然我无法使用还原向导。该向导将选择备份文件,但是当我选择左上方的“文件”选项以指定MDF和LDF的位置时,对话框将挂起。我尝试过维修,没有运气。
20 sql-server 


1
此NO JOIN PREDICATE警告应该让我感到震惊吗?
我正在对性能不佳的存储过程的细节进行故障排除。该过程的这一部分将引发NO JOIN PREDICATE警告 select method = case methoddescription when 'blah' then 'Ethylene Oxide' when NULL then 'N/A' else methoddescription end, testmethod = case methoddescription when 'blah' then 'Biological Indicators' when NULL then 'N/A' else 'Dosimeter Reports' end, result = case when l.res is null or l.res <> 1 then 'Failed' …

2
MSSQL $ SQLEXPRESS的NTFS权限损坏
我一直在“保护”我们的数据库服务器。为此,我从SQL Express安装创建的文件夹中删除了一些权限。 D:\SQL D:\SQL\Data D:\SQL\Backup etc.. 我将权限保留在Data文件夹中,但从其他文件夹中删除了我认为不需要的所有内容。 现在我无法备份数据库。如果我尝试选择备份位置,则对话框不会在d:\ SQL文件夹中显示任何内容,如果我将路径放在自己的位置,它会告诉我:- 无法访问服务器上的指定路径或文件。验证您具有必要的安全特权,并且路径和文件存在。 ... 看来是文件夹权限问题。以类似方式配置的另一台服务器对名为“ MSSQL$SQLEXPRESS” 的帐户具有一堆“允许”权限(我知道我已删除),但是由于没有这样的group,user或build,我无法重新添加这些权限-服务器上的安全性原则。 如何为此MSSQL$SQLEXPRESS帐户添加权限?

2
你能解释这个执行计划吗?
碰到这个东西时,我正在研究其他东西。我正在生成包含一些数据的测试表,并运行不同的查询,以了解不同的写查询方式如何影响执行计划。这是我用来生成随机测试数据的脚本: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('t') AND type in (N'U')) DROP TABLE t GO CREATE TABLE t ( c1 int IDENTITY(1,1) NOT NULL ,c2 int NULL ) GO insert into t select top 1000000 a from (select t1.number*2048 + t2.number a, newid() b from [master]..spt_values …

2
如何将调试按钮添加到SSMS v18?
该Debug按钮位于此版本的SSMS中: 但是它在版本18预览4中不存在: 我尝试了几种方法将Debug按钮添加到我的SSMS中,但未成功。 是否可以将Debug按钮添加到SSMS v18?
20 sql-server  ssms 

6
SQL Server是否支持GREATEST和LEAST,如果不是,通常的解决方法是什么?
回顾这个问题,似乎不需要做很多工作。他们正在尝试扩大日期范围。在其他数据库中,您只需使用greatest和least.. least(extendDate,min), greatest(extendDate,max) 当我尝试使用这些时,我得到 'least' is not a recognized built-in function name. 'greatest' is not a recognized built-in function name. 那将覆盖任一方向的延伸。 出于问题的目的,您仍然必须进行排他性范围替换。 我只是想知道SQL Server用户如何实现查询模式来模仿least和greatest功能化。 PostgreSQL GREATEST/LEAST MySQL的GREATEST/LEAST 玛丽亚数据库 GREATEST LEAST DB2 GREATEST LEAST 甲骨文 GREATEST LEAST 您是否将条件展开为CASE语句,或者是否有Microsoft的扩展程序,第三方加载项或许可证来启用此功能?

1
为什么简单循环会导致ASYNC_NETWORK_IO等待?
在使用SSMS v17.9的计算机上,以下T-SQL大约需要25秒: DECLARE @outer_loop INT = 0, @big_string_for_u VARCHAR(8000); SET NOCOUNT ON; WHILE @outer_loop < 50000000 BEGIN SET @big_string_for_u = 'ZZZZZZZZZZ'; SET @outer_loop = @outer_loop + 1; END; ASYNC_NETWORK_IO根据sys.dm_exec_session_wait_stats和,它累计532毫秒的等待时间sys.dm_os_wait_stats。总的等待时间随着循环迭代次数的增加而增加。使用wait_completed扩展事件,我可以看到等待大约每43毫秒发生一次,但有一些例外: 另外,我可以获得在ASYNC_NETWORK_IO等待之前发生的调用堆栈: sqldk.dll!SOS_DispatcherBase::GetTrack+0x7f6c sqldk.dll!SOS_Scheduler::PromotePendingTask+0x204 sqldk.dll!SOS_Task::PostWait+0x5f sqldk.dll!SOS_Scheduler::Suspend+0xb15 sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf6af sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf44c sqllang.dll!SNIPacketRelease+0xd63 sqllang.dll!SNIPacketRelease+0x2097 sqllang.dll!SNIPacketRelease+0x1f99 sqllang.dll!SNIPacketRelease+0x18fe sqllang.dll!CAutoExecuteAsContext::Restore+0x52d sqllang.dll!CSQLSource::Execute+0x151b sqllang.dll!CSQLSource::Execute+0xe13 sqllang.dll!CSQLSource::Execute+0x474 sqllang.dll!SNIPacketRelease+0x165d sqllang.dll!CValOdsRow::CValOdsRow+0xa92 sqllang.dll!CValOdsRow::CValOdsRow+0x883 sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x15d sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x638 sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x2ad …
19 sql-server  ssms 

2
Windows OS Quantum与SQL OS Quantum
简单问题 SQL Server Quantum(4 ms)如何与Server OS Quantum(通常为187.5 ms)同步? 简单问题解释 使用184 ms的OS量(相当于46个完整的SQL量)后,OS量需要3.5 ms的时间才能将计划移交给其他进程。SQL OS启动一个量子(4毫秒),然后在3.5毫秒之后,OS量子决定停止当前的SQL OS线程,该线程在产生调度之前还有0.5 ms。现在会发生什么? 深入了解OS Quantum 在接下来的两节中,我将写出到目前为止我发现的有关OS量子以及如何计算量子持续时间的内容。操作系统“量子”的持续时间基于“滴答”,“滴答”本身的持续时间基于“时钟间隔”,通常为15.625000毫秒。但是让我详细说明一下... 蜱 在Blog文章Know Thy Tick中,作者Jim解释了时钟间隔(也称为“滴答声”)的基本知识以及它们的用途。 当我读到诸如“大多数x86多处理器的时钟间隔……约为15毫秒”之类的信息时,我被迫确定时钟间隔或“滴答”间隔的值。幸运的是,我在Windows Internals Third Edition中读到此书的那本书为帮助我缓解痛苦提供了参考。...上述书籍的作者Mark Russinovich慷慨地在其网站上提供了ClockRes实用程序。运行此实用程序,我可以确定x86多处理器PC上的时钟间隔为15.625000 ms。有趣,但是我好奇的心想知道更多。 量子 本文的作者在第二篇文章中继续进行解释 那... 当然,滴答间隔很重要的真正原因是它会影响线程调度。Windows调度程序为每个线程分配了一个“量子”时间来执行,然后才允许以相同优先级运行另一个任务。调度程序分配给线程的数量是滴答间隔的倍数。为特定线程选择的特定量子值超出了本文的讨论范围。 好的,所以我知道一个量子是什么,但不知道一个量子将运行多长时间。 现在,让我们仅检查XPe中前景线程的默认量子值。在这种情况下,Windows调度程序会分配18或6个滴答间隔的量。(是的,要将量子转换为刻度间隔,必须将其除以3。...,但是倍数的原因是使调度程序能够“充电”线程以执行导致其挂起的操作。) 现在我们知道时钟间隔(滴答)应该在15.625000毫秒左右,并且在Windows桌面操作系统上,默认的时间间隔是18,这将导致6滴答或93.750000毫秒(18/3 * 15.625000毫秒)。 在Windows Server OS上,默认范围是不同的。“处理器调度”设置设置为“后台服务” 可以通过“系统设置|高级(选项卡)|性能(部分)|设置...”找到此设置,这将打开“性能选项|高级(选项卡)|处理器调度” 然后,默认的量子设置为36(背景)至36(前景)。量子更大,因此更长。这是Windows桌面操作系统上18(6个刻度)量子前台设置的93.750000 ms的两倍,在Windows Server OS上为后台服务设置的该值约为187.500000 ms。 观察/解释 当您在服务器或台式机上将设置从“后台服务”更改为“应用程序”时,注册表中的HKLM \ SYSTEM …
19 sql-server 

4
SQL递归实际上如何工作?
来自其他编程语言的SQL,递归查询的结构看起来很奇怪。一步一步地走,它似乎崩溃了。 考虑以下简单示例: CREATE TABLE #NUMS (N BIGINT); INSERT INTO #NUMS VALUES (3), (5), (7); WITH R AS ( SELECT N FROM #NUMS UNION ALL SELECT N*N AS N FROM R WHERE N*N < 10000000 ) SELECT N FROM R ORDER BY N; 让我们来看一看。 首先,执行锚成员并将结果集放入R。因此R初始化为{3,5,7}。 然后,执行降到UNION ALL以下,并且第一次执行递归成员。它在R上执行(即在我们当前拥有的R上:{3,5,7})。结果为{9,25,49}。 这个新结果如何处理?是否将{9,25,49}附加到现有的{3,5,7}上,标记结果并集R,然后从那里进行递归?还是将R重新定义为仅此新结果{9,25,49},然后再进行所有合并? 两种选择都没有道理。 如果R现在为{3,5,7,9,25,49}并且执行递归的下一个迭代,那么我们将以{9,25,49,81,625,2401}结束,并且失去了{3,5,7}。 如果现在R仅是{9,25,49},则存在标签错误的问题。R被理解为锚定成员结果集与所有后续递归成员结果集的并集。而{9,25,49}只是R的一个组成部分。到目前为止,我们还没有获得R的全部。因此,将递归成员写为从R中选择是没有意义的。 …

1
依靠INSERT的OUTPUT子句的顺序是否安全?
给定此表: CREATE TABLE dbo.Target ( TargetId int identity(1, 1) NOT NULL, Color varchar(20) NOT NULL, Action varchar(10) NOT NULL, -- of course this should be normalized Code int NOT NULL, CONSTRAINT PK_Target PRIMARY KEY CLUSTERED (TargetId) ); 在两种略有不同的方案中,我想插入行并从标识列返回值。 场景1 INSERT dbo.Target (Color, Action, Code) OUTPUT inserted.TargetId SELECT t.Color, t.Action, t.Code …

3
强制流量不同
我有一张这样的桌子: CREATE TABLE Updates ( UpdateId INT NOT NULL IDENTITY(1,1) PRIMARY KEY, ObjectId INT NOT NULL ) 本质上跟踪ID不断增加的对象的更新。 该表的使用者将选择一个由100个不同的对象ID组成的块,这些ID UpdateId由一个特定的并从其开始UpdateId。从本质上讲,跟踪它停止的位置,然后查询任何更新。 我发现这是一个有趣的优化问题,因为我只能通过编写恰好由于索引而做我想要做的查询的查询来生成一个最大最优查询计划,但不能保证我想要的: SELECT DISTINCT TOP 100 ObjectId FROM Updates WHERE UpdateId > @fromUpdateId @fromUpdateId存储过程参数在哪里。 有以下计划: SELECT <- TOP <- Hash match (flow distinct, 100 rows touched) <- Index seek 由于UpdateId正在使用对索引的查找,因此结果已经不错,并且可以按照我想要的那样从最低更新ID到最高更新ID进行排序。这会生成一个流程明确的计划,这正是我想要的。但是排序显然不能保证行为,所以我不想使用它。 此技巧还导致了相同的查询计划(尽管具有冗余的TOP): …

3
负载下插入性能提高:为什么?
我有一段代码可以对高度非规范化的表执行插入操作。这些表的列数范围从〜100到300+。这是在Windows Server 2008上运行的SQL Server 2008 R2。 每个插入包括在同一事务下插入多个表。有些插入是由NHibernate批处理的,但是有些不能,但是它们都在同一事务下。 当我通过重复调用一段执行插入的代码执行了500次插入操作时,平均得到的时间约为360毫秒。 奇怪的是,当我使用4个进程同时运行测试代码(在Windows Server 2008下从4个不同的命令提示符运行同一个exe)时,每次调用的插入性能会好得多。我看到突发速度高达90毫秒(几乎快了X4)。我正在从代码中测量插入时间。 由于4个进程彼此之间一无所知,因此我假设这与SQL Server有关,但是我绝对不知道为什么。我想知道为什么会这样,以及是否有任何配置可以使我在插入频率不那么高的情况下获得相同的性能。 同样欢迎提出有关SQL Server监视方法的建议,以了解数据库级别的情况。

2
为什么TVP必须是READONLY,为什么其他类型的参数不能是READONLY
根据此博客,如果函数或存储过程的OUTPUT参数不是参数,则它们本质上是按值传递的;如果它们是参数,则本质上应视为传递引用的更安全的版本OUTPUT。 最初,我认为强制声明TVP的目的READONLY是向开发人员明确表示不能将TVP用作OUTPUT参数,但由于我们无法将非TVP声明为,因此还必须继续进行下去READONLY。例如,以下失败: create procedure [dbo].[test] @a int readonly as select @a 消息346,级别15,状态1,过程测试 参数“ @a”不是表值参数,因此不能声明为READONLY。 由于统计数据未存储在TVP上,因此阻止DML操作的原理是什么? 是否与OUTPUT出于某些原因不希望TVP成为参数有关?

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.