Questions tagged «sql-server-2008»

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

3
是否可以根据SQL Server版本选择RAISERROR或THROW?
现在是我的代码: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH 除非它在装有SQL 2008的计算机上运行,​​否则效果很好。我想让CATCH块对SQL版本进行检查,如果THROW等于或高于2012,则运行THROW,如果它等于或高于2012,则运行RAISERROR。语法错误,我想知道是否有可能。即使像这样简单的事情也对我不起作用。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任何建议表示赞赏。

2
找不到正在创建备份的进程
我们在客户服务器上安装了SQL Server 2008实例。客户的IT部门负责计算机的各种备份。 SQL Server日志显示每天晚上7点有完整备份,但是我们找不到SQL Server中计划的任何计划的证据。 我们联系的技术人员无法告诉我们是否存在某种自动备份,他们所知道的只是整个计算机都在备份。 使用在该论坛线程中找到的脚本,我发现物理设备名称是GUID,这意味着这是一个外部备份过程: USE [msdb] GO SELECT [bs].[database_name], [bs].[backup_start_date], [bs].[backup_finish_date], [bs].Server_name, [bs].user_name AS [BackupCreator] , [bmf].physical_device_name FROM msdb..backupset bs INNER JOIN msdb..backupmediafamily bmf ON [bs].[media_set_id] = [bmf].[media_set_id] ORDER BY [bs].[backup_start_date] DESC 这是上面查询的一行: db_name 2015-09-16 19:01:23.000 2015-09-16 19:01:28.000 SERVER_NAME NT AUTHORITY \ SYSTEM {424F084A-F35D-4A66-8FC7-072268A89A77} 5 此外,备份的开始和结束日期仅持续5秒钟,因此我想很明显这不是SQL …

1
从不同表中使用ORDER BY选择TOP 1时如何设置索引视图
我正在努力在以下情况下设置索引视图,以便在执行以下查询时不会进行两次聚集索引扫描。每当我为该查询创建索引视图然后使用它时,它似乎都会忽略我在其上放置的任何索引: -- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++ SELECT TOP 1 * FROM dbo.TB_test1 t1 INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1 ORDER BY t1.somethingelse1 ,t2.somethingelse2; GO 表格设置如下: 两张桌子 它们由上面的查询通过内部联接联接 并按上面的查询从第一个表开始的列排序,然后从第二个表开始的列排序;仅选择TOP 1 (在下面的脚本中,还有一些行可以生成测试数据,以防万一有助于重现问题) -- +++ TABLE SETUP +++ CREATE TABLE [dbo].[TB_test1] ( [PK_ID1] [INT] IDENTITY(1, …

3
级联主键更新为所有引用的外键
是否可以通过在引用该引用的所有外键之间级联更新来更新主键列值? #编辑1: 当我运行followinq查询 select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable') ,我看到update_referential_action设置为0。因此,在更新主键列之后不执行任何操作。如何更新外键以使其成为CASCADE UPDATE? #编辑2: 为了脚本化脚本中所有外键的创建或删除,请运行以下脚本(从此处获取) DECLARE @schema_name sysname; DECLARE @table_name sysname; DECLARE @constraint_name sysname; DECLARE @constraint_object_id int; DECLARE @referenced_object_name sysname; DECLARE @is_disabled bit; DECLARE @is_not_for_replication bit; DECLARE @is_not_trusted bit; DECLARE @delete_referential_action tinyint; DECLARE @update_referential_action tinyint; DECLARE @tsql nvarchar(4000); DECLARE @tsql2 nvarchar(4000); DECLARE …

4
如何编写加总一列以创建离散存储桶的窗口查询?
我有一个表,其中包含一列十进制值,例如: id value size -- ----- ---- 1 100 .02 2 99 .38 3 98 .13 4 97 .35 5 96 .15 6 95 .57 7 94 .25 8 93 .15 我需要完成的工作有点难以描述,因此请耐心等待。我正在尝试做的是创建size列的聚合值,每当前一行的总和为1时(根据降序排列),该列的值就会递增1 value。结果看起来像这样: id value size bucket -- ----- ---- ------ 1 100 .02 1 2 99 .38 1 3 …

3
获取定界字符串中值的第二次或第三次出现
我有下表: ========================================================== | Name_Level_Class_Section | Phone Num | ========================================================== | Jacky_1_B2_23 | 1122554455 | | Johnhy_1_B2_24 | 1122554455 | | Peter_2_A5_3 | 1122554455 | ========================================================== 我正在考虑简化我的SQL语句,如下所示: select *, substring(Name_Level_Class_Section, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_', Name_Level_Class_Section) + 1)) + 1, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))+1))- CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))) as CLA from Bookings order by CLA asc, Name_Level_Class_Section …

5
SQL Server中的最大内存设置
我在单个专用服务器上运行SQL Server 2008和基于Web的应用程序,仅提供2Gb内存。 如其他地方所述,SQL Server通常会占用高达98%的物理内存,这似乎减慢了服务器上运行的Web应用程序的速度。 在SSMS的服务器属性中的“内存”下,“最大服务器内存”(以Mb为单位)设置为:2147483647 我的问题是,考虑到我拥有的可用内存量,并且同一台服务器也正在运行Web应用程序,建议在最大服务器内存框中放入的建议数量是多少? 此外,在SQL Server运行时更改此数字是否安全? 感谢您的意见。

3
自动十进制舍入问题
这个问题相对简单。我需要计算3列,中间结果是很大的小数,并且SQL Server早就遇到了一个问题,即无论是否进行任何类型的转换,SQL Server基本上都会舍入小数。 例如,让我们做一个简单的除法1234/1233。计算器将产生1,00081103000811。但是,当我在SQL Server上执行此操作时,我们得到以下信息: -- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37)) -- Result: rounded at 1.000811 SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233) -- Correct result at 1,00081103000811 -- But this requires the zeroes to be put in manually …

2
SQL Server 2008 R2使用事务日志还原COPY_ONLY完整备份
经过一些研究,我似乎找不到这个问题的答案。 背景我正在尝试设置一个符合以下三个要求的备份计划: 备份的可靠性,每晚进行一次完整备份 可以从中还原的事务日志备份 磁盘空间不足 备份必须在本地可用于审核工具 因此,为了满足这些需求,我正在考虑每周进行完整备份,每天进行差异备份以及每小时进行一次备份。然后,每天晚上将运行可在异地运送的copy_only备份,这样做是为了使日志链不会损坏,并且我们可以在可靠的夜间进行完整的异地备份,而不必占用太多本地磁盘空间。 问题是否可以从copy_only备份还原,然后再还原事务日志。 让我举一个例子,让您知道我在说什么。 使用下面的列表,我想知道是否可以还原FullbackupCOPY_ONLYC.bak,然后还原TransactionbackupG.trn,TransactionbackupH.trn,最后是TransactionbackupI.trn > ---List of Backups--- FullbackupA.bak 01/01/2013 00:00:00 > DifferntialbackupA.bak 02/01/2013 00:00:00 FullbackupCOPY_ONLYA.bak 02/01/2013 00:00:00 > TransactionbackupA.trn 02/01/2013 01:00:00 > TransactionbackupB.trn 02/01/2013 02:00:00 > TransactionbackupC.trn 02/01/2013 03:00:00 > DifferntialbackupB.bak 03/01/2013 00:00:00 FullbackupCOPY_ONLYB.bak 03/01/2013 00:00:00 > TransactionbackupD.trn 03/01/2013 01:00:00 > TransactionbackupE.trn 03/01/2013 …

1
为什么SQL Server在将它与一个int变量进行比较之前需要将count(*)结果转换为int?
我的应用程序中有很多查询,在Have子句中,我有count聚合函数与int变量的比较。在查询计划中,我可以在比较之前看到一个implicit_convert。我想知道为什么会这样,因为根据sql Server文档,count函数的返回类型是int。那么为什么要有一个隐式转换来比较两个int值呢? 以下是一个这样的查询计划的一部分,其中@IdCount被定义为一个int变量。 |-过滤器(WHERE:([[Expr1022] = [@ IdCount]))) |-计算标量(DEFINE:([[Expr1022] = CONVERT_IMPLICIT(int,[Expr1028],0))) |-流聚合(组BY:([[MOCK_DB]。[dbo]。[Scope]。[ScopeID])DEFINE:([Expr1028] = Count(*)))


4
某些用户查询缓慢
我从C#.NET Web应用程序中调用了几个查询,这些查询对我来说总是很快的(我是SQL Server上的本地管理员),但是对于一组用户(具有所需权限的域组)而言,查询速度却非常慢它在应用程序中超时的点。 是什么导致完全相同的查询针对不同的用户运行不同? 更多信息: 该查询是C#代码中的内联SQL,而不是存储过程 该应用程序使用域身份验证,用户和我自己都可以通过该应用程序运行查询 似乎问题出在不同的计划上,其中一个已被缓存,因此这对于不同的用户来说是不同的。某些因素正在影响缓存,因为现在通过应用程序查询对我来说很慢,而在SQL Server Management Studio中则很快。

2
SQL Server 2012可用性组是否为“ AlwaysON”?
在传统的SQL Server群集中,当发生故障转移时,连接到SQL Server失败实例的所有客户端都会失去连接,并且每个客户端都必须重新建立与故障转移群集实例的新连接。 AlwaysON可用性组是否可以缓解此问题?如果SQL Server 2012 AlwaysON可用性组的故障转移对连接到SQL Server的客户端透明吗?

3
SQL Server 2008日期时间索引性能错误
我们使用的是SQL Server 2008 R2,它有一个很大的表(100M +行),带有主ID索引,而一datetime列则具有非聚集索引。基于使用专门用于索引datetime列的order by子句,我们看到了一些非常不寻常的客户端/服务器行为。 我通读了以下帖子:https : //stackoverflow.com/questions/1716798/sql-server-2008-ordering-by-datetime-is-too-slow, 但是客户端/服务器上发生的事情比实际发生的更多在这里开始描述。 如果我们运行以下查询(已编辑以保护某些内容): select * from [big table] where serial_number = [some number] order by test_date desc 查询每次都会超时。在SQL Server Profiler中,执行的查询在服务器上看起来像这样: exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * ..... 现在,如果将查询修改为: declare @temp int; select * from [big table] where serial_number = [some number] order …

3
数据库始终以恢复模式启动
每次我重新启动服务器时,数据库始终处于恢复模式,并且正常运行大约需要20分钟。这总是并且仅在重新启动服务器时发生,所以我有几个问题... 有人告诉我这可能是由于日志文件过大引起的?正确吗?如果没有,那么其他原因可能是什么? 我需要减少日志文件的空间以防止恢复。哪个更好:缩小还是截断? 如何缩小或截断日志文件/数据库以减小大小?语法是什么? 我目前正在使用Microsoft SQL Server 2008。

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.