Questions tagged «sql-server-2008-r2»

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

3
如何提高MS SQL Server中原始查询的性能?
我有一个ASP.NET网站,它拥有自己的独立数据缓存,并且数据不会长时间更改,因此它不需要使用相同的查询第二次查询SQL Server。我需要提高转到该SQL Server的首次(原始)查询的性能。一些查询处理的数据太多,可能导致SQL Server使用tempdb。我不使用临时表变量或临时表,因此SQL Server决定tempdb在需要时自行使用。 我的数据库大小为16Gb,服务器计算机上有32Gb的物理RAM。 我了解MS SQL Server缓存策略会尝试将数据保留在RAM中,以加快类似查询的性能(如果它们需要再次加载相同的数据)。除此之外,它将尝试使用可用的RAM代替tempdb来提高性能,而不会引起磁盘访问。 我想当需要在tempdb SQL Server中存储一些内容的查询出现并且没有足够的RAM可用时,SQL Server有2个选择: 1)卸载一些缓存的数据并使用备用的RAM代替tempdb以避免磁盘写入 2)保留缓存的数据以备将来查询,并开始使用tempdb,这会导致写入慢速磁盘。 我不知道在这种情况下SQL Server会做出什么选择,但我希望它成为选择#1,因为我只关心首次查询(原始)的性能,因为我再也不会向SQL Server发送相同的查询了。 (尽管我可能会发送类似的查询)。 在这种情况下,SQL Server缓存策略是什么? 在避免针对原始查询的tempdb和第二次查询的速度之间,如何平衡RAM的使用? 是否可以以选择#1的方式配置SQL Server?如果是,那怎么办? 我还能如何提高所有原始SQL查询的性能? 由于我不了解SQL Server缓存策略,因此我想将数据库放在RAM磁盘上。这将确保即使SQL Server始终选择#1,任何原始查询都可以高速加载未缓存的数据。这样做的风险是,如果SQL Server继续选择#2,则可能会开始使用更多具有较少可用RAM的tempdb(在我将16Gb用于RAM磁盘后仅剩下16Gb),这将减慢那些导致溢出的原始查询的速度tempdb。 我对SQL 2008 R2的解决方案感兴趣,但是我想对于SQL 2008,SQL 2005可能是相同的,并且可能是SQL 2000。 说明: 该框上没有其他应用程序在运行,它专用于SQL Server。网站在单独的框中运行。 它是Windows Server 2008 R2 Enterprise 64位上的SQL Server 2008 R2 Standard Edition 64位。 …

2
即使在创建存储过程时表存在,是否有办法强制延迟名称解析?
在SQL Server中创建存储过程时,可以引用不存在的表。但是,如果该表确实存在,则该过程中引用的任何列都必须存在于该表中(“ 延迟名称解析”)。 是否可以指示SQL Server推迟过程中引用的所有表的名称解析,而不管它们是否存在?我确实希望保留常规语法检查,因此即使有可能,也无法将存储过程定义修改到系统表中。 我希望我的要求看起来有些怪异,所以这里有一些背景知识:我会从用C#编写的应用程序中自动生成表定义和存储过程,并且我很难更改代码以根据SQL的需要对更改进行排序他们。我的代码“保证”架构在事务中是一致的,但是目前,我无法保证在定义引用它们的存储过程之前已定义表列。 下面是C#创建的SQL的规范示例,“说明”了我要解决的问题。 --Say this table already exists. CREATE TABLE myTable ( a NVARCHAR(MAX) ) GO --My C# code creates something like this BEGIN TRAN GO --the stored procedure gets generated first. CREATE PROCEDURE mySproc AS BEGIN SELECT a,b FROM myTable END --then the table update …

4
SQL Server 2008 R2:计算机名称更改后出现问题
更改托管本地SQL Server实例的远程服务器的计算机名称后,我遇到一个令人困惑的问题。 基本上,远程服务器是从一个站点移动到另一个站点的。为了简化此操作,我备份了旧数据库并将其还原为新的数据库名称,清除了数据,以便可以将其用作客户端软件的新数据库。我还更改了计算机名称,因为我们总是这样做,以便通过服务器的站点号来标识每个服务器。 可以通过客户端软件很好地连接数据库,并且我可以直接登录到SQL Server。但是,我的一个SQL Server代理作业失败,事件日志中出现错误: SQL Server计划的作业“立即重置”(0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD)-状态:失败-调用日期:2012-02-07 08:10:05-消息:作业失败。无法确定作业Nightly Reset的所有者(Site-19 \ Admin)的所有者(Site-19 \ Admin)是否具有服务器访问权限(原因:无法获取有关Windows NT组/用户'Site-19 \ Admin'的信息,错误代码0x534。[SQLSTATE 42000](错误15404))。 现在,“ Site-19”是旧计算机名称,该名称已更改,并且服务器已重置。我使用新站点号'Site-28'手动连接,它显示我已通过Site-28 \ Admin连接到SQL Server。但是,当我查看代理作业的属性时,它显示所有者为Site-19 \ Admin,并且当我尝试浏览用户以对其进行更改时,Site-28 \ Admin不会显示为选项,只有Site-19 \ Admin。如果我从该脚本中编写了一个新作业,然后将所有者手动更改为“ Site-28 \ Admin”,则会使用所有者“ Site-19 \ Admin”创建新作业。 在sys.servers(或通过sp_helpserver)中查找,我只有一个条目:当前计算机名称。但是,SELECT @@ SERVERNAME返回原始的开发计算机名称(两个名称之前更改)。 简而言之,我无法运行此重要的SQL Server代理作业,因为该作业属于不再存在的用户,并且我不知道如何更改它或将其创建为正确的用户。



2
更好的“喜欢,喜欢,喜欢,喜欢,喜欢”的方法
在这个问题上,他和我有同样的问题。我需要类似的东西: select * from blablabla where product like '%rock%' or like '%paper%' or like '%scisor%' or like '%car%' or like '%pasta%' 这很丑陋,并且没有使用索引。在这种情况下,这实际上是唯一的方法(在字符串中选择多个单词),还是应该使用FULLTEXT? 据我了解,全文可以在字符串中选择多个单词。 这个问题也涉及全文

5
给定范围内的质数
最近,我被赋予打印所有质数(1-100)的任务。我在那里彻底失败了。我的代码: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END 尽管我最终没有完成它,但我想知道在数据库(SQL Server 2008 R2)上执行这样的程序是否可行。 如果是,它将如何结束。

2
需要通过Sql Server 2008 R2中的数据库邮件发送格式化的HTML电子邮件
我的要求是将自动电子邮件创建为(一种通过数据库邮件格式化的HTML电子邮件)。基本要求已完成,在该条件下,当触发作业时,它将数据插入到表格中,并且已计划将信息作为电子邮件发送,但现在客户已要求使用这种格式。 我已经完成的当前格式 PO Date:2014-11-26 PO ID:PO1 SAP Ref:0001106102 GRN:1067 DealerID:045 Dealer Name:ABC(Pvt)Ltd. 2 Status:New 客户要求的格式,如表格格式 PO Date |PO ID| SAP Ref| GRN|DealerID|Dealer Name|Status 这是我用于将数据插入到Email_Table(_ERROR_MAIL)中的SQL查询,需要根据要求进行查询 IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ImpCancelledGRN') BEGIN DROP PROCEDURE [dbo].[ImpCancelledGRN] END GO CREATE PROCEDURE [dbo].[ImpCancelledGRN] WITH ENCRYPTION AS …

2
如何动态别名列?
我有一个表(不是我自己设计的),其中有20个变量命名的列。也就是说,根据您要查看的记录类型,该列的适用名称可以更改。 可能的列名存储在另一个表中,我可以很容易地查询它。 因此,我真正要查询的查询是这样的: SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type), Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type) FROM Tbl1 WHERE Type = @Type 显然这是行不通的,那么如何获得类似的结果? ' 我已经尝试构建查询字符串并EXECUTE对其进行查询,但这仅返回“命令已成功完成”,并且似乎未返回行集。 事实证明,我使用了不正确的查询来构建动态SQL,因此构建了一个空字符串。SQL Server肯定正确执行了空字符串。 请注意,我之所以需要这样做,而不是简单地对列名进行硬编码,是因为列名是用户可配置的。

4
有没有一种快速的方法来查找SQL Server 2008 R2中所有已加密/已加密数据的列?
有没有一种快速的方法来查找SQL Server 2008 R2中所有已加密/已加密数据的列? 我需要使开发服务器中所有加密列中的数据无效(根据我们的业务规则)。我知道大多数专栏是因为我们经常使用它们,但是我想透彻一点,也希望能够证明已经找到了所有专栏。 我已经在网上搜索,查看了INFORMATION_SCHEMA并检查了我认为有用的DMV以及sys.columns和sys.objects,但是到目前为止还算不上什么。

2
从数据库属性对话框的“文件”页面更改数据库所有权时出错
我已还原数据库,并以db_owner的身份创建了一个新用户(与我登录时使用的用户相同)。现在,当我想查看数据库图时出现错误 无法安装数据库图支持对象,因为该数据库没有有效的所有者。要继续,请首先使用“数据库属性”对话框的“文件”页面或“更改授权”语句将数据库所有者设置为有效的登录名,然后添加数据库支持对象 现在,当我尝试从数据库属性的“文件”页面更改所有权时,出现以下错误: Set Owner因数据库'ABC'失败。(Microsoft.SqlServer.SMO)其他信息:SMO中发生异常建议的新数据库所有者James-PC \ James被映射为该数据库中的用户James。参数名称:James-PC \ James“ 请帮助我解决此问题,以便从另一个系统还原数据库备份后,可以在这台计算机上查看数据库图。


1
如何为不平等查询建立索引?
我有基于浮点列的值排除数据的查询 select * from My_Table where my_Float_column != 0 and my_Float_column is not null 如果可以,我不想为浮点型索引。执行计划是否足够聪明,可以使用如下所示的过滤索引(在这里我仅索引0和null值)以提高性能? CREATE NONCLUSTERED INDEX IX_My_Table_Float_Filtered ON My_Table (my_Float_column) WHERE my_Float_column = 0 or my_Float_column is null

4
如何合并具有不同有效日期的类似记录?
我正在处理的表包含三个部分: 一个ID柱(在另一个表中的主键) 一些数据列 日期有效from/ to列。 值: ID Data From To 1 a 2015-01-01 2015-01-05 1 a 2015-01-06 2015-01-10 1 b 2015-01-11 2015-01-15 1 a 2015-01-16 2015-01-20 2 c 2015-01-01 2015-01-05 2 c 2015-01-06 2015-01-10 通过以一定间隔获取另一个数据源的“快照”并将有效日期分配给记录来更新表。问题在于这些快照为记录(具有不同的有效日期)创建了重复的条目,这些记录在该时间间隔内根本没有更改。 我想通过查找具有连续日期的行并合并它们并为它们分配一个有效期来减小表的大小。例如: ID Data From To 1 a 2015-01-01 2015-01-10 1 b 2015-01-11 2015-01-15 1 a …

2
“签出”记录以进行处理的策略
我不确定是否有一个命名模式,或者没有,因为这是一个糟糕的主意。但是我需要我的服务才能在主动/主动负载平衡环境中运行。这仅是应用服务器。该数据库将位于单独的服务器上。我有一项服务,该服务将需要为表中的每个记录运行一个过程。此过程可能需要一到两分钟,并且每n分钟重复一次(可配置,通常为15分钟)。 拥有需要处理的1000条记录的表,以及针对同一数据集运行的两个服务,我希望每个服务“签出”要处理的记录。我需要确保一次只有一个服务/线程正在处理每个记录。 我的同事过去曾经使用过“锁定表”。将记录写入此表以在逻辑上锁定另一个表中的记录(该另一个表是静态的,并且添加了非常偶尔的新记录),然后将其删除以释放锁定。 我想知道对于新表来说,是否有更好的一列来表明它何时被锁定以及当前是否被锁定,而不是不断插入一个删除项,这会更好。 有人对这种事情有提示吗?是否有建立长期(逻辑)逻辑锁定的模式?如何确保一次仅锁定一项服务的任何提示?(我的同事使用TABLOCKX锁定整个表。)

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.