Questions tagged «sql-server»

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


3
如何授予单个存储过程的执行权限?
通常,当我创建存储过程时,我将以下内容用作排序模板 Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end 有没有一种方法可以在我使用该存储过程时仅授予该存储过程执行权限? 例如... Grant execute [User_Execute] ...但是仅用于此存储过程? 我见过其他一些类似的问题,但它们似乎都涉及所有存储过程,而不仅仅是一个,也没有见过可以在create procedure脚本中指定权限的问题。即使是有关如何在不使用GUI的情况下为特定存储过程设置权限的答案,也将受到欢迎。 编辑 最佳答案肯定会指出正确的方向,这本质上就是我要寻找的东西,我没想到要对命令进行批处理,而这正是我最终要做的,将命令与存储过程一起进行。无论如何,我认为它非常漂亮。 Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
40 sql-server 

2
DBA对SSAS有什么了解?
我已经看过很多有关SSAS业务方面的材料,但是关于管理和管理的重要方面却不是很多。 从管理SQL Server Analysis Services实例的角度来看,工作中的DBA必须了解什么才能正确有效地管理SSAS?
40 sql-server  ssas 


4
如何在SQL Server 2008中分配整个Active Directory组安全访问权限?
我想在我的内部应用程序中使用集成安全性,这些应用程序都在一个域中。不幸的是,我从来没有能够使它正常工作。我想在SQL Server中为整个Exchange(活动目录)组分配一个角色,以对某些表进行读/写访问。这样,我就不必在雇用某人时就创建一个运算符,也不必在被解雇时就删除一个运算符。这可能吗?我要采取什么步骤?


5
我可以添加一个忽略现有违规的唯一约束吗?
我有一个表,当前在列中有重复的值。 我无法删除这些错误的重复项,但我想防止添加其他非唯一值。 我可以创建一个UNIQUE不检查现有合规性的商品吗? 我尝试使用,NOCHECK但未成功。 在这种情况下,我有一个表将许可信息与“ CompanyName”相关联 编辑:具有相同的“ CompanyName”具有多个行是错误的数据,但此时我们不能删除或更新这些重复项。一种方法是让INSERTs使用存储过程,该存储过程将导致重复操作失败...如果可以让SQL自己检查唯一性,那将是更好的选择。 该数据通过公司名称查询。对于少数现有重复项,这将意味着将返回并显示多行...虽然这是错误的,但在我们的用例中是可以接受的。目的是防止将来发生这种情况。从评论看来,我似乎必须在存储过程中执行此逻辑。


3
SQL Server的“总服务器内存”消耗停滞了数月,而可用空间增加了64GB以上
我遇到了一个奇怪的问题,即SQL Server 2016 Standard Edition 64位似乎已经限制了为其分配的总内存的正好一半(128 GB的64GB)。 输出@@VERSION为: Microsoft SQL Server 2016(SP1-CU7-GDR)(KB4057119)-13.0.4466.4(X64)2017年12月22日11:25:00版权所有(c)Windows Server 2012 R2 Datacenter 6.3上的Microsoft Corporation标准版(64位)(内部版本9600:)(管理程序) 输出sys.dm_os_process_memory为: 当我查询时sys.dm_os_performance_counters,我看到Target Server Memory (KB)处的131072000,Total Server Memory (KB)位于处的一半65308016。在大多数情况下,我认为这是正常现象,因为SQL Server尚未确定它需要为其自身分配更多的内存。 但是,它已经“卡住”了〜64GB,已经超过2个月了。在此时间段内,我们对某些数据库执行了大量内存密集型操作,并向实例添加了近40个数据库。我们共有292个数据库,每个数据库都有4GB的预分配数据文件(自动增长速率为256MB)和2GB的日志文件的自动增长速率为128MB。我每晚晚上12:00执行一次完整备份,并从星期一到星期五从6:00 AM到8:00 PM(每15分钟间隔)开始事务日志备份。这些数据库的整体吞吐量相对较低,但是我怀疑SQL Server尚未爬到Target Server Memory 很自然地会通过添加新数据库,正常查询执行以及已运行的占用大量内存的ETL管道来实现。 SQL Server实例本身位于虚拟化(VMware)Windows Server 2012R2服务器之上,该服务器具有12个CPU,144GB内存(128GB到SQL Server,16GB预留给Windows)以及总共4个虚拟磁盘,这些虚拟磁盘位于具有15K SAS驱动器的vSAN之上。Windows自然位于64GB C:磁盘上,页面文件为32GB。数据文件位于2TB D:磁盘上,日志文件位于2TB L:磁盘之上,而tempdb位于256GB T:磁盘上,其中8x16GB文件没有自动增长。 我已验证除之外,服务器上没有其他SQL Server实例在运行MSSQLSERVER。 该服务器完全专用于SQL Server实例,因此我们没有在其上运行的其他任何可能消耗内存的应用程序或服务。 我利用RedGate SQL …

6
为什么添加TOP 1会显着降低性能?
我有一个相当简单的查询 SELECT TOP 1 dc.DOCUMENT_ID, dc.COPIES, dc.REQUESTOR, dc.D_ID, cj.FILE_NUMBER FROM DOCUMENT_QUEUE dc JOIN CORRESPONDENCE_JOURNAL cj ON dc.DOCUMENT_ID = cj.DOCUMENT_ID WHERE dc.QUEUE_DATE <= GETDATE() AND dc.PRINT_LOCATION = 2 ORDER BY cj.FILE_NUMBER 那给了我可怕的表现(就像从来没有想过要等待它完成一样)。查询计划如下所示: 但是,如果我删除,则会TOP 1得到一个看起来像这样的计划,它会在1-2秒内运行: 在下面更正PK和索引。 该事实TOP 1改变了查询计划并不让我感到吃惊,我只是有点惊讶,这使情况变得更糟了这么多。 注意:我已经阅读了这篇文章的结果,并了解了Row Goaletc 的概念。我很好奇的是如何去改变查询,以便它使用更好的计划。目前,我正在将数据转储到临时表中,然后从中提取第一行。我想知道是否有更好的方法。 编辑对于在事实结束后仍在阅读本文的人,这里还有一些其他信息。 Document_Queue-PK / CI是D_ID,它具有约5k行。 Correspondence_Journal-PK / CI为FILE_NUMBER,CORRESPONDENCE_ID,具有约140万行。 当我开始时,没有其他索引。我最后在Correspondence_Journal(Document_Id,File_Number)上写了一个

2
如何优化在嵌套循环(内部联接)上运行缓慢的查询
TL; DR 由于这个问题一直在引起人们的关注,因此在这里我将对其进行总结,这样新来的人就不必经历历史了: JOIN table t ON t.member = @value1 OR t.member = @value2 -- this is slow as hell JOIN table t ON t.member = COALESCE(@value1, @value2) -- this is blazing fast -- Note that here if @value1 has a value, @value2 is NULL, and vice versa 我意识到这可能不是每个人的问题,但是通过强调ON子句的敏感性,它可以帮助您朝正确的方向看。无论如何,原始文本在这里供将来的人类学家使用: 原文 …

2
改变列宽
增大列(nvarchar)宽度是否一定会使表格掉落? 换句话说,可以在具有活跃用户的生产环境中更改宽度吗? 我发现,如果大小增加(而不是减小),这将不是问题。
39 sql-server 

3
执行计划基础-哈希匹配混乱
我开始学习执行计划,并对哈希匹配的工作原理以及为什么在简单的联接中使用它感到困惑: select Posts.Title, Users.DisplayName From Posts JOIN Users on Posts.OwnerUserId = Users.Id OPTION (MAXDOP 1) 据我了解,顶部索引扫描的结果变为具有哈希功能,并且底部索引群集扫描的每一行都被查找。我了解哈希表至少在某种程度上是如何工作的,但是在这样的示例中,我对哪些值确切地被哈希感到困惑。 对我来说有意义的是,它们之间的公共字段id被散列了-但是,如果是这种情况,为什么还要散列一个数字呢?

6
为什么在我的测试案例中,顺序的GUID密钥比顺序的INT密钥执行得更快?
询问后这个问题比较顺序和非顺序的GUID,我试图表与顺序初始化的GUID主键比较上1 INSERT性能)newsequentialid(),和2)的表与INT主键与顺序初始化identity(1,1)。我希望后者是最快的,因为整数的宽度较小,并且生成顺序整数比顺序GUID似乎也更简单。但是令我惊讶的是,带有整数键的表上的INSERT显着慢于顺序GUID表。 这显示了测试运行的平均时间使用量(毫秒): NEWSEQUENTIALID() 1977 IDENTITY() 2223 谁能解释一下? 使用了以下实验: SET NOCOUNT ON CREATE TABLE TestGuid2 (Id UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID() PRIMARY KEY, SomeDate DATETIME, batchNumber BIGINT, FILLER CHAR(100)) CREATE TABLE TestInt (Id Int NOT NULL identity(1,1) PRIMARY KEY, SomeDate DATETIME, batchNumber BIGINT, FILLER CHAR(100)) DECLARE @BatchCounter INT = 1 …

3
非聚集索引在堆上的性能与聚集索引的性能
该2007年白皮书比较了在作为聚簇索引组织的表上与在与CI相同的关键列具有非聚簇索引的组织为堆的表上的单个选择/插入/删除/更新和范围选择语句的性能表。 通常,聚簇索引选项在测试中表现更好,因为只需要维护一种结构,并且因为不需要书签查找。 本文未涉及的一个可能有趣的案例是,堆上的非聚簇索引与聚簇索引上的非聚簇索引之间的比较。在那种情况下,我希望堆甚至可以在NCI叶级别上表现更好,因为SQL Server具有直接遵循的RID,而不需要遍历聚集索引。 是否有人知道在这一领域已经进行过类似的正式测试,如果是的话,结果是什么?

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.