Questions tagged «sql-server»

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

1
我应该在数据仓库中禁用“自动更新统计信息”吗?
我在SQL Server中有200 GB的数据仓库。 对于某些查询,我的执行时间一直很慢;例如12个小时的简单delete查询inner join。 在对执行计划进行了一些研究之后,我使用该WITH FULLSCAN选项更新了查询中涉及的2个表的统计信息。 现在查询将在不到一秒钟的时间内执行,因此看来统计信息不是最新的。 我正在考虑禁用auto update statistics数据库,并UPDATE STATISTICS在加载数据仓库后手动运行。每天晚上,从源ERP系统增量加载数据仓库。 我假设auto update statistics在数据仓库场景中不是真的有用吗?相反,加载数据后手动更新统计信息是否更有意义?

2
由于潜在的数据丢失,无法转换该值。
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 5年前关闭。 首先,让我澄清这不是一个重复的问题,也不是这个问题的潜在重复。我已经尝试过在StackOverflow和DBA Stack Exchange上解决此问题的每个单个变体的所有答案,但是没有任何运气。 在过去的两天里,我一直在努力解决这个问题(每天大约工作7个小时),即使在谷歌搜索问题之后,似乎也没有其他人对我的问题有完全相同的解决方案。 我想做什么? 在SSIS中,我试图从CSV文件中读取内容,并将其中的行插入到OLE DB数据库中。为此,我进行了有史以来最简单的设置,如下所示。 Flat File Source -读取CSV行。 Derived Column -目前不执行任何操作(仅在此处进行实验)。 Data Conversion -目前不执行任何操作(仅在此处进行实验)。 OLE DB Destination -将行存储在数据库中。 当我尝试运行它时,它将停止在我的OLE DB目标上执行,并显示以下错误消息。 输入“ OLE DB目标输入”(51)上的输入列“金额”(187)出错。返回的列状态为:“由于潜在的数据丢失,无法转换该值。”。 失败(Amount)的列当前为类型DT_STR。这似乎是我目前最信任的类型。 我尝试了什么? 我尝试在Flat File Connection失败的列上使用“建议类型”功能。因此,建议使用Single byte signed int数据类型。 在我的平面文件源处停止。 错误是数据转换失败。列“金额”的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值”。 我尝试使用Derived Column将列转换为DT_I4。 停在我的派生列。 错误是数据转换失败。列“金额”的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值”。 我尝试使用将该Data Conversion列的值转换为DT_I4。 停在我的Data Conversion。 错误是数据转换失败。列“金额”的数据转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值”。 我尝试更改DT_STR源和目标中我的值的长度。 根据设置在源或目的地停止。 …

1
如何在SQL Server中查询现有的数据库快照?
我正在尝试创建一个t-sql查询,该查询可以确定给定的数据库是否具有从其创建的任何数据库快照。 例如,如果要创建这样的快照: CREATE DATABASE [DatabaseA_Snapshot] ON (NAME=DatabaseA, FileName='<whatever>') AS SNAPSHOT OF [DatabaseA] 有什么方法可以稍后再次查询该快照的存在吗?我可以看到它显示在sys.databases中,但是我找不到任何可以帮助我确定这是从DatabaseA创建的数据库快照的信息。 SQL Server Management Studio的对象资源管理器将其放置在“数据库快照”文件夹下,因此显然可以通过某种方法将它们与常规数据库区分开。

8
无法使用我的Windows帐户启动SqlLocalDB实例
我是管理员,只需运行以下命令: sqllocaldb start v11.0 结果: Start of LocalDB instance "v11.0" failed because of the following error: Error occurred during LocalDB instance startup: SQL Server process failed to sta rt. 事件查看器日志事件ID:528 Windows API调用WaitForMultipleObjects返回了错误代码:575。Windows系统错误消息是:{Application Error}应用程序无法正确启动(0x%lx)。单击“确定”关闭该应用程序。报告在线:3621。 我尝试了另一个(用户和管理员)帐户,它们没有问题。 我卸载并重新安装了SQLLocalDB.msi 2012版本,但没有运气。您有任何想法和解决方法吗?


5
在触发器中将INSERTED和DELETED表联接在一起的糟糕表现
我在表上有一个UPDATE触发器,该触发器监视从一个特定值更改为任何其他值的特定列。发生这种情况时,它将通过单个UPDATE语句更新另一个表中的一些相关数据。 触发器要做的第一件事是检查是否有任何更新的行使该列的值与所讨论的值发生了变化。它只是将INSERTED与DELETED连接起来,并比较该列中的值。如果没有任何条件,它将尽早解决,因此UPDATE语句不会运行。 IF NOT EXISTS ( SELECT TOP 1 i.CUSTNMBR FROM INSERTED i INNER JOIN DELETED d ON i.CUSTNMBR = d.CUSTNMBR WHERE d.CUSTCLAS = 'Misc' AND i.CUSTCLAS != 'Misc' ) RETURN 在这种情况下,CUSTNMBR是基础表的主键。如果我对此表进行了大的更新(例如,超过5000行),则即使我没有触摸CUSTCLAS列,该语句也需要AGES。我可以在Profiler中看到它在此语句上停滞了几分钟。 执行计划很奇怪。它显示了具有3,714次执行和约1,850万个输出行的插入扫描。通过CUSTCLAS列上的过滤器运行。它将其(通过嵌套循环)连接到“删除的扫描”(也已在CUSTCLAS上过滤),该“删除的扫描”仅执行一次并且有5000条输出行。 我在这里做什么愚蠢的事情导致这个?请注意,触发器绝对必须正确处理多行更新。 编辑: 我也尝试过这样写(以防EXISTS做不愉快的事情),但它仍然一样糟糕。 DECLARE @CUSTNMBR varchar(31) SELECT TOP 1 @CUSTNMBR = i.CUSTNMBR FROM INSERTED i INNER JOIN …

4
从RESTORE HEADERONLY中提取字段
我正在尝试使用“ RESTORE HEADERONLY ”来获取进行我要还原的备份的日期。 命令: RESTORE HEADERONLY FROM DISK = '<path to .bak file>' 在查询分析器中可以很好地工作,并提供一个包含50列的结果集。 问题实际上是从代码访问它。 通过声明50:ish列中的每一个,将其插入到temp表中,exec然后从中获取所需的值。 问题是我真的想避免将整个结果集声明为临时表,因为如果将来的版本中向它们添加列,这似乎是一个非常脆弱的解决方案。 有什么方法可以从结果集中只获取一个列而不声明所有列吗?

3
在T-SQL中使用CAST降低性能
我们有一个SQL生成器,该生成器通常针对指定的字段发出SQL条件语句(为了便于讨论,我们将其标记为myField)。 如果myField类型为NVARCHAR,我们可以将所述字段与字符串进行比较,如下所示:myField = 'foo'。 但是,这不适用于type的字段NTEXT。因此,我们必须使用强制转换进行比较 CAST(myField as NVARCHAR(MAX)) = 'foo'。如果myField类型为NVARCHAR或,则实际上可以使用NTEXT。 在已经是类型的字段上执行上述强制转换会对性能产生什么影响NVARCHAR?我希望SQL Server足够聪明,可以动态地识别myField已经存在的类型NVARCHAR(有效地将其CAST变成无操作)。

4
如何获得计数为零的组?
我将尝试从SQL Server数据库中的数据制作图形。我会在所有街道上都看到这条街上生活的用户数,即使计数为零。 为此,我尝试了以下查询: Create table Streets( ID int IDENTITY primary key, Name varchar(100) ); create table users( ID int IDENTITY primary key, Username varchar(100), StreetID int references Streets(id) ); insert into streets values ('1st street'), ('2nd street'), ('3rd street'), ('4th street'), ('5th street'); insert into users values ('Pol', 1), ('Doortje', …

3
如何调查BULK INSERT语句的性能?
我主要是使用Entity Framework ORM的.NET开发人员。但是,因为我不想失败使用ORM,所以我试图了解数据层(数据库)中发生的情况。基本上,在开发过程中,我启动了探查器,并检查了查询中代码的某些部分生成了什么。 如果我发现非常复杂的东西(即使不仔细编写,ORM甚至可以从相当简单的LINQ语句生成可怕的查询)和/或繁重的事情(持续时间,CPU,页面读取),请在SSMS中进行处理并检查其执行计划。 对于我的数据库知识水平,它工作正常。但是,BULK INSERT似乎是一种特殊的生物,因为它似乎不会产生SHOWPLAN。 我将尝试说明一个非常简单的示例: 表定义 CREATE TABLE dbo.ImportingSystemFileLoadInfo ( ImportingSystemFileLoadInfoId INT NOT NULL IDENTITY(1, 1) CONSTRAINT PK_ImportingSystemFileLoadInfo PRIMARY KEY CLUSTERED, EnvironmentId INT NOT NULL CONSTRAINT FK_ImportingSystemFileLoadInfo REFERENCES dbo.Environment, ImportingSystemId INT NOT NULL CONSTRAINT FK_ImportingSystemFileLoadInfo_ImportingSystem REFERENCES dbo.ImportingSystem, FileName NVARCHAR(64) NOT NULL, FileImportTime DATETIME2 NOT NULL, CONSTRAINT UQ_ImportingSystemImportInfo_EnvXIs_TableName UNIQUE …

3
更改maxrecursion的系统范围默认值
如何更改系统范围的默认值MAXRECURSION? 默认情况下为100,但是我需要将其增加到1000。 我无法使用查询提示,因为我使用的程序会接受我的查询并为我执行查询,但是不幸的是,我无法解决此限制。 但是,我确实对服务器实例具有管理员权限。我在服务器方面进行了摸索,但没有看到与查询选项或递归相关的任何信息。我假设有有是一个某处在那里我可以更新系统范围内的默认。 有任何想法吗?

1
将存储过程的结果插入表变量
我有一个存储过程,将值存储在表变量中。我选择这些值并在调用过程时将其返回。 我试图在另一个表变量中设置这些返回值,但我无法弄清楚。 存储过程 ALTER PROCEDURE [dbo].[GetOrSetDomainId] @DomainName varchar(50), @DomainUrl varchar(50) AS BEGIN DECLARE @DomainId bigint; DECLARE @NumberOfRwos bigint; DECLARE @DomainHistory TABLE ( DomainId bigint, HasHistory bit, ServerOnline bit, DatabaseOnline bit, ServerPerformance bigint, DatabasePerformance bigint, SoldTickets bigint ) SELECT @NumberOfRwos = COUNT(Id) FROM DomainData WHERE DomainName = @DomainName OR DomainUrl = …

2
如何使用T-SQL(不是SSMS)将登录名映射到数据库
我正在编写一个程序,要求我分配代码中的所有权限和所有内容。我陷入了这一部分: 我只想做相当于单击msdb数据库的“地图”下的小框,然后将该用户分配给SqlAgentUser角色的等效操作。我需要一个用户才能添加/编辑SQL Server代理作业。我可以使用SSMS正确进行设置,但是我一生都无法弄清楚如何在原始SQL中进行设置。 我已经研究过ALTER LOGIN,但是没有看到任何可以满足我需求的东西。我怀疑我只是不知道Google的正确用语。我通常不会做这种事情。 任何帮助深表感谢!

2
SQL连接查询以显示一个表中不存在行的行
我正在尝试完成一些有关员工时间记录的报告。 我们有两个专门针对此问题的表格。Members表中列出了员工,他们每天输入他们已执行的工作的时间条目并将其存储在Time_Entry表中。 使用SQL Fiddle进行设置的示例:http ://sqlfiddle.com/#!3/e3806/7 最终的结果我要的是一个表,表示所有的Members列中的列表,然后将展示他们的总和小时,在其他列查询的日期。 问题似乎是,如果Time_Entry表中没有特定成员的行,那么该成员现在将有一行。我尝试了几种不同的联接类型(左,右,内部,外部,完全外部等),但似乎没有一种能满足我的要求(基于SQL Fiddle的最后一个示例): /*** Desired End Result ***/ Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL ADavis | 0 | 11-10-2013 | 0 | 0 BTronton | 0 | 11-10-2013 | 0 | 0 CJones | 0 | 11-10-2013 | 0 | 0 DSmith …

2
复制并重命名数据库,以便我可以附加两个副本
我在服务器上有一个名为“ mysite_db”的数据库,并且在本地计算机上也创建了一个副本“ mysite_db”。我想将数据库(从本地计算机)附加到已经具有该数据库名称的服务器。这意味着我必须更改本地数据库的名称(我想我也需要更改物理文件)。我不知道该怎么做。你能指导我吗? 我的目标是在服务器上加载两个数据库,例如:“ mysite_db”和“ myNewSite_db”

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.