Questions tagged «sql-server»

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


2
是否建议使用身份代替主键?
我们可以声明一个Identitylike,id_num这样id_num它将具有唯一编号的增量。 CREATE TABLE new_employees ( id_num int IDENTITY(1,1), fname varchar (20), minit char(1), lname varchar(30) ) 由于为每行提供了唯一的编号,因此建议使用它Identity作为替代方法吗?Primary keyIdentity


1
在JOIN子句中使用OR时奇怪的查询计划-持续扫描表中的每一行
我正在尝试生成一个示例查询计划,以说明为什么对两个结果集进行UNIONing可能比在JOIN子句中使用OR更好。我写的查询计划让我感到困惑。我将StackOverflow数据库与Users.Reputation上的非聚集索引一起使用。 查询是 CREATE NONCLUSTERED INDEX IX_NC_REPUTATION ON dbo.USERS(Reputation) SELECT DISTINCT Users.Id FROM dbo.Users INNER JOIN dbo.Posts ON Users.Id = Posts.OwnerUserId OR Users.Id = Posts.LastEditorUserId WHERE Users.Reputation = 5 查询计划位于https://www.brentozar.com/pastetheplan/?id=BkpZU1MZE,对我来说查询时间为4:37分钟,返回了26612行。 我以前从未见过从现有表中创建过这种恒定扫描的样式-我不熟悉为什么在用户输入的单行通常使用恒定扫描的情况下,每行都要进行恒定扫描的原因例如SELECT GETDATE()。为什么在这里使用它?在阅读此查询计划时,我将非常感谢一些指导。 如果我将该OR拆分为一个UNION,它将生成一个标准计划,该计划在12秒内运行,并返回相同的26612行。 SELECT Users.Id FROM dbo.Users INNER JOIN dbo.Posts ON Users.Id = Posts.OwnerUserId WHERE Users.Reputation = 5 UNION SELECT Users.Id …


1
从运行在本地服务帐户上的SQL Server运行域用户拥有的SSIS包
我想运行一个包含传输SQL Server对象任务的SSIS包。涉及的服务器在同一域中,但是SQL Server服务在本地服务帐户上运行。因此环境如下所示: 域 服务器1 在本地帐户上运行的SQL Server 在文件系统上:SSIS包 在SQL Server代理中:作业 服务器2 在本地帐户上运行的SQL Server 为了能够登录到两台服务器,我创建了一个域帐户用作服务帐户。当我使用该域帐户登录到Server 1,然后从文件系统执行该程序包时,每个步骤都会成功。但是,当我尝试将作业添加到SQL Server时,遇到以下问题之一: 情况1.职位所有者:本地帐户;运行SSIS步骤作为域帐户的代理。当我将作业所有者设置为本地帐户,但将作业作为域帐户的代理运行时,作业本身将成功执行,但是程序包会抛出如下错误 执行失败,出现以下错误:“目录'LocalApplicationData'不存在。”。 可以通过在服务器1上为域用户创建具有管理员权限的登录名来解决此错误,但这显然不是理想的解决方案。将帐户添加到SQL Server代理/ DTS组之一也不起作用。 情况2.作业所有者:域帐户;运行SSIS步骤作为域帐户的代理。当我同时为该域帐户设置作业所有者和“以用户身份运行”时,该作业将完全无法启动,并出现以下错误: 无法确定作业的所有者(域\域用户)Job name是否具有服务器访问权限(原因:无法获取有关Windows NT组/用户“域\域用户”的信息,错误代码0x5。[SQLSTATE 42000](错误15404)) 。 我相信最后一个错误是因为SQL Server在本地帐户上运行,并且therfor无法查看哪些权限域帐户具有该权限。 什么是使作业正常运行的正确方法?情况2对我来说比较干净,但是似乎不可能,因为SQL Server在本地帐户上运行。情况1也可以,但是不会在我的SQL Server上授予域用户管理权限。 更新: @JonSeigel和@Brownstone先生: 这似乎是问题的原因是由于缺少权限。但是,该错误是关于不存在的“ LocalApplicationData”-为每个帐户生成的文件夹之一。我已经使用运行包的凭据登录了服务器(从而创建了配置文件目录),并尝试了配置文件目录的几种权限组合。即使手动授予该特定目录上的几乎所有权限,我也会遇到上述错误。 在进行更多研究时,我遇到了一个论坛线程,网址为http://www.sqlservercentral.com/Forums/Topic391332-148-1.aspx#bm391441,这非常相似-尽管也没有解决方案。
10 sql-server  ssis 



2
文档中sys.dm_exec_query_stats警告的实际影响是什么?
该文档的sys.dm_exec_query_stats状态如下: 如果服务器上当前正在执行工作负载,则对sys.dm_exec_query_stats的初始查询可能会产生不准确的结果。可以通过重新运行查询来确定更准确的结果。 我有时会在活动工作负载期间查询该DMV,并且希望获得准确的结果。我不知道如何在实践中应用上述警告。我应该总是查询DMV两次并使用第二个结果集,因为这样会更准确吗?这感觉有些牵强。我是否需要了解DMV可能不准确的方式,以便将其纳入分析?如果是这样,会出现什么样的错误:缺失的行,过时的值,不一致的行或其他? sys.dm_exec_query_stats在活动工作负载期间使用的最佳做法是什么?
10 sql-server  dmv 

2
将我的sa用户锁定
因此,我试图在Microsoft SQL Server Management Studio 2019中更改一些设置。我将登录模式从混合(Windows和SQL身份验证)更改为仅Windows,现在我无法使用sa帐户登录,但我无法有另一个具有管理员权限的帐户。 我该怎么办?任何建议将不胜感激。

1
为SQL Server中的所有连接设置ARITHABORT ON的后果是什么?
因此,我确定SQL Server的行为不稳定是由于.Net SqlClient数据提供程序的默认设置为SET ARITHABORT OFF。话虽如此,我已经阅读了各种文章,讨论了实现此目标的最佳方法。对我来说,我只想采用一种简单的方法,因为SQL Server遭受了麻烦,而且我的查询调优还没有完全跨应用程序(显然,SET在sp中添加不能正常工作)。 在Erland Sommarskog 关于该主题的精彩文章中,他基本上建议通过更改要SET ARITHABORT ON为连接发布的应用程序来采用安全的方法。但是,在dba.stackexchange 问题的此答案中,Solomon Rutzky 提供了实例范围和数据库范围的方法。 在此设置整个实例范围时,我在这里缺少什么后果?正如我所看到的...由于SSMS ON默认情况下已设置了此设置,所以我认为在ON所有服务器范围内都设置此服务器范围没有什么害处。归根结底,我只需要此SQL Server才能执行最重要的任务。

1
生成名称列的排列和组合
我有以下示例数据用于排列和组合。 create table tbltest ( name varchar(50), addres varchar(100) ); insert into tbltest values('Sam Mak John','Street 1 HNo 101 USA'); insert into tbltest values('Donatella Nobatti','HNo 101 UK'); insert into tbltest values('Sam Buca','Main Road B Block UAE'); insert into tbltest values('Juan Soponatime','Hight Street CA'); insert into tbltest values('Aaron Spacemuseum','HNo A10 100 …

5
SQL在分区上计数不同
我有一个包含两列的表,我想计算Col_B上的不同值(以Col_A为条件)。 MyTable Col_A | Col_B A | 1 A | 1 A | 2 A | 2 A | 2 A | 3 b | 4 b | 4 b | 5 预期结果 Col_A | Col_B | Result A | 1 | 3 A | 1 | 3 A | …

5
在SQL Server的同一列上使用多个外键
SQL Server允许我在列上创建多个外键,并且每次使用不同的名称时,我都可以创建另一个引用同一对象的键。基本上所有键都定义相同的关系。我想知道在同一列中定义多个外键并引用另一个表中的同一列的用途。SQL Server允许我们做这样的事情有什么好处?

3
将标量函数转换为TVF函数以并行执行-仍在串行模式下运行
发布后,我的一个查询正在串行执行模式下运行,我注意到在视图中使用了两个新功能,该视图在从应用程序生成的LINQ to SQL Query中引用。因此,我将那些SCALAR函数转换为TVF函数,但查询仍在串行模式下运行。 早些时候,我在其他一些查询中将标量转换为TVF,它解决了强制串行执行的问题。 这是标量函数: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER JOIN Event1 r WITH (NOLOCK) ON (cis.Event1Id = r.Id) WHERE (r.EventNumber …

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.