Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

1
在SQL Server中更改索引创建内存设置有什么影响?
我试图在SQL Server 2008数据库中创建一些索引,但是却收到以下错误消息。 消息8606,级别17,状态1,第1行此索引操作每个DOP需要1024 KB的内存。DOP为2的2048 KB的总需求大于为高级服务器配置选项“索引创建内存(KB)”设置的sp_configure值704 KB。增加此设置或减少DOP并重新运行查询。 当前,索引创建内存设置设置为794KB,每个查询的最小内存设置为1024KB。更改这些值会产生什么影响?特别是在性能方面。我应该更改它们,创建索引然后将其更改回还是应该将其设置为0?

3
如何更改触发器的触发顺序?
真的,我很少使用触发器。所以我第一次遇到一个问题。我有很多带有触发器的表(每个表2个或更多)。我想知道并更改每个表的触发触发器的顺序。是否可以获取此信息? 添加: 这是我发现的有关mssqltips的一篇不错的文章。

1
连接不同地理区域的数据库的最佳实践
我们将在不同的国家/地区设置SQL Server。我们需要链接它们,但不必具有直接链接(如链接服务器中的链接)。换句话说,它们可以松散耦合。 通过VPN连接它们并将它们作为链接服务器,还是通过Web服务使用松散耦合,是更好的选择? “更好”是指稳定。

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源和目标中我的值的长度。 根据设置在源或目的地停止。 …


3
根据时间间隔对记录进行分组
我有一个具有以下模式的表,我需要定义一个查询,该查询可以基于时间间隔(例如每分钟记录数)对数据进行分组,然后提供自上一组以来对SnapShotValue所做的更改的总和。目前,SnapShotValue始终递增,因此我只需要求和。任何人都可以帮助执行此操作的SQL Server T-SQL查询吗?我愿意更改架构,但这是我目前拥有的。 架构图 CaptureTime (datetime) SnapShotValue (int) 样本数据 1 Jan 2012 00:00:00, 100 1 Jan 2012 00:00:30, 125 1 Jan 2012 00:01:00, 200 1 Jan 2012 00:01:30, 300 1 Jan 2012 00:02:15, 400 1 Jan 2012 00:02:30, 425 1 Jan 2012 00:02:59, 500 所需的查询结果 1 Jan 2012 00:01:00, 225 …

4
由于“客户端处理时间”较长,因此远程SELECT语句速度较慢,但​​本地速度较快
当连接到我们的生产服务器(SQL Server 2008,功能非常强大的计算机)时,此SELECT语句将花费2秒,回吐所有字段(总共4 MB的数据)。 SELECT TOP (30000) * FROM person WITH(NOLOCK); 从同一网络上的任何其他框中(使用SQL身份验证或Windows身份验证进行连接),相同的查询需要1分钟8秒。 我正在用这个非常简单的语句进行测试,以说明它不是索引问题或与查询相关的问题。(目前,所有查询都存在性能问题...) 这些行是成块的,而不是一次全部。我立即得到第一行,然后等待1分钟以上,以使成批的行进入。 从远程框中运行查询时,这是查询的客户端统计信息: Query Profile Statistics Number of INSERT, DELETE and UPDATE statements 0 Rows affected by INSERT, DELETE, or UPDATE statements 0 Number of SELECT statements 2 Rows returned by SELECT statements 30001 Number of transactions 0 …

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
从正在执行的作业中获取作业ID或作业名称
我有一个中央数据库,可以在所有服务器上写入工作结果。我通过SQL作业中的powershell将3个参数传递回中央服务器上的sp,以验证该作业应在当时运行,等等。然后通过SSRS公开该信息,因此我们可以看到作业失败/长时间运行的作业/ &尚未运行但应该运行的作业(或者如果有人弄乱了时间表)。 为此,我将2个作业步骤添加到每台服务器上的每个作业中,并且我希望将脚本减少到仅添加到每个作业中的1个步骤。甚至可能从网络共享中调用该脚本。 但是我的问题是我传递的三个参数之一。我需要从正在执行的作业中获取正在执行的作业ID或作业名称,因此不必硬编码name参数。我传递的3个参数是Jobid,状态(成功/失败)和errormsg。我编写的powershell脚本非常简单。 调用sqlcmd -ServerInstance“ MYRemoteSYSTEM”-数据库remoteDB-查询“ exec dbo.JOB_LOG'JOBNAME / ID','成功/失败','错误消息在这里''' 这将我需要的东西写到桌子上。我已经看过msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs /,但是这些都不保证在执行多个作业的情况下,我可以获得正确执行作业的ID或名称。同时。 我什至尝试查看sys.sysprocesses,但我认为由于代理作业是一个powershell脚本,因此它显示为“ .Net SqlClient数据提供程序”,因此我无法从显示为“ SQLAgent-”的作业中删除二进制JOBID。 TSQL JobStep(作业0xF1800243164745429C30474FFD5C990C:第1步)” ---我从Denny Cherry的帖子中学到的 -谢谢denny- 任何关于如何获取执行中的Jobid的想法将不胜感激。 谢谢, 克里斯

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”

2
快速将NULL列更改为NOT NULL
我有一个包含数百万行的表和一个允许NULL值的列。但是,当前没有任何行具有该列的NULL值(我可以通过查询很快地验证这一点)。但是当我执行命令时 ALTER TABLE MyTable ALTER COLUMN MyColumn BIGINT NOT NULL; 相对而言,查询将永远花费。实际上,它需要10到20分钟,是添加检查约束的两倍多。有没有一种方法可以立即更新该列的表元数据,特别是因为我知道该列没有行具有NULL值?

2
为什么tempdb的io_stall_writes_ms这么高?
我们将用户和系统数据文件放在同一磁盘驱动器上。用户文件的(io_stall_write_ms /(1.0 + num_of_writes))低于2,但是tempdb文件通常超过400。而不是常规的数据库数据文件。 SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id AND fs.[file_id] = mf.[file_id] 谢谢,

2
SQL Server数据库何时准备好接受查询?
在SQL Server错误日志文件中,我找到了以下几行: 2018-02-22 14:10:58.95 spid17s Starting up database 'msdb'. 2018-02-22 14:10:58.95 spid16s Starting up database 'ReportServer'. 2018-02-22 14:10:58.95 spid18s Starting up database 'ReportServerTempDB'. 2018-02-22 14:10:58.95 spid19s Starting up database 'XYZ'. 如果在此之前我检查数据库XYZ的状态,则ONLINE使用以下语句: SELECT state_desc FROM sys.databases WHERE name='XYZ' ...但是当我尝试使用C#应用程序连接到该数据库时,它无法连接到数据库。 错误是: 用户“ asd”的登录失败。 原因:无法打开显式指定的数据库。 我尝试了三种不同的用户(Windows用户,sa,为应用程序定义的SQL Server用户)。在操作系统启动时运行该应用程序时会发生问题,但是如果在启动后手动启动该应用程序,则不会发生任何错误,因此我认为所有SQL Server设置和防火墙设置都是正确的。 在此之前,我还检查了服务状态是否正在运行。 我还应该检查什么以确保数据库实际上已联机并且可以查询? 我正在寻找一个可以告诉我可以查询数据库的键,而不是延迟一段时间(即使不是基于明确的原因)。 我考虑过扫描错误日志中的文本“正在启动数据库XYZ”,但这意味着我必须为SQL Server错误日志的路径为应用程序添加一个设置。这也意味着要多次读取文件,直到找到该短语。

1
SQLServer升级顾问2014挂起
我尝试对SQL Server 2008服务器运行SQL Server Upgrade Advisor 2014。 连接到2008服务器时,一切看起来都很好,我可以选择要分析的数据库。 但是一旦启动,它将永远运行,无需进行任何操作(停留在分析规则步骤:0/112)。 发生了什么事,我该如何解决? SQL Server 2008和2014均为Express版本,均安装在我的笔记本电脑上。不幸的是,这是我发现运行升级顾问的唯一方法(存在太多限制,无法在实际的pro / dev数据库上运行它)。 在SQL 2008实例是SP3的需要。 Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) 当Advisor冻结时,我们可以看到4个休眠查询(没有活动查询): SELECT name, cmptlevel FROM …

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.