Questions tagged «sql-server»

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

3
什么时候绝对需要程序查询?
我知道我们倾向于不惜一切代价避免SQL Server中的游标和循环,但是在某些情况下您绝对需要过程查询,而基于集合的查询却不会为您提供结果? 我了解两者之间的区别,只是我从未遇到过需要使用游标的情况。我想知道是否有这种情况。

6
有关MS SQL Server监视软件或服务的建议?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 6年前关闭。 我有一个客户端,其MS SQL Server实例(2000、2005)分布在20到30台服务器中。我一直致力于使事情井井有条,并将定期检查数据库基础结构的状态以进行运行状况检查,测试备份等。我们还计划在2008年之前尽可能多地收集这些数据库。 我知道诸如用于Linux的New Relic堆栈Web应用程序和数据库之类的服务,而我今天才通过Google偶然发现了SQL Monitor产品(RedGate)。任何人都可以就使您自己的客户端能够监视和管理其MS SQL实例的服务或工具(您具有经验)提供一些指导吗?

4
使用复合键识别行的指南
使用一组4列将行标识为唯一的(一种是前键,另一种是float数据类型)是一种好习惯(或者会产生不利影响)吗?我正在尝试构建一个表(链接了4个键),该表将描述表中的唯一条目。我很好奇这是一个好的进攻计划还是有更好的方法。 出于视觉目的,请绘制下表。我们的库存项目的组织方式如下表所示:([K]是主键的象征,线是关系) Sheet_Class Sheet_Type Sheet_Size =========== ========== ========== [K] Sheet_Class-. [K] Sheet_Type--. [K] Sheet_Size '---- Sheet_Class '---- Sheet_Type Length Width Thickness 数据可以通过以下方式呈现,但是为了简洁起见,我不介绍链接的列: Sheet_Class Sheet_Type Sheet_Size (Tables) [Sheet_Class] [Sheet_Type] [Length], [Width], [Thickness] (Column Values) ============= ============ ============================== Aluminum 5052-H32 48, 96, 0.032 48, 96, 0.040 48, 96, 0.063 6061-T6 60, 120,0.032 …

2
如何在select(SQL Server)中使用变量?
如果我想计算一列并将结果用于多于一列,如何在不进行两次计算的情况下做到这一点? 例: SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail ,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail FROM sometable 如何避免在不使用多个选择的情况下写两次?

3
明智地使用触发器来更新另一个表吗?
我有一个Object表,该表是从另一个数据库的集成服务(可以根据需要更改的表)填充的。在某些时候,我们需要手动在另一个表中添加帖子,ObjectObjectGroup (ObjectId, ObjectGroupId)如果帖子中Object.ObjectType有某个整数值,则需要添加。由于集成服务无法处理这种更新,因此我正在考虑向Object表添加一个触发器,该触发器用伪代码如下: if Object.ObjectType = 10 begin if Object.ObjectNumber like '<string pattern>' begin insert into ObjectObjectGroup values... end end 这是明智的设置,还是在性能方面有更好的方法?

3
SSMS和@@ variable扩展中的SQLCMD模式
将SQLCMD模式与SSMS一起使用时(不是从命令行使用),是否可以将当前服务器和实例分配给变量?这不同于分配普通的TSQL变量。 问题定义 我想使用SQLCMD的变量扩展功能来替代我们部署脚本中的特定于环境的值,而不是我已经走进的现有tsql字符串构建mash。除了当前环境之外,使用SQLCMD处理部署已经非常顺利。 -- -- define 2 sqlcmd variables that will be expanded in scripts -- :setvar dbServer "DEVA2\DEV2" :setvar dbNotServer @@servername SELECT '$(dbServer)' AS hard_coded_value , @@servername AS [servername] , '$(dbNotServer)' AS dbNotServer 并产生以下结果。 hard_coded_value servername dbNotServer DEVA2\DEV2 DEVA2\DEV2 @@servername Meat Loaf说3分之2不错,但我宁愿3分之3的解决方案。当该脚本被部署到测试服务器上时,我不想信任编辑脚本的部署人员。 如果使用SQLCMD的唯一​​解决方案是完全从命令行调用脚本,那么我可以接受,但由于我对使用SQLCMD持绿色态度,因此想将其抛在这里。 所需的输出 :setvar dbNotServer @@servername SELECT '$(dbNotServer)' …

9
哪个DBMS足够快(足以容纳数千名玩家)进行在线游戏?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 我目前正在制作MMORPG游戏,该游戏可能同时有数千名玩家在线(可能不是;只是一厢情愿)。首先,我们想使用MySQL,但是我听说它还不够快。 哪个DBMS足够快?它有多像SQL Server(就像我在学校学到的那样)?


4
批量数据导入建议
我们正在做一个项目,每天需要从Excel电子表格中导入数据。数据将从预定义模板以及我们的想法中导入,首先,我们将数据上传到临时表中并执行清理操作(删除不必要的信息,在父表中添加新行并获取其FK等)。 我需要知道是否有任何工具或实用程序可以减少我们的工作量。 从不同来源(主要是从Excel电子表格)插入大容量记录的最佳方法是什么?

3
有关大型SQL Server数据库设计的建议
我们正在MSSQL 2008 R2 Standard中创建一个数据库,该数据库将存储大量记录。我们每年在一张表中估计有2亿多条记录,而我们主要是在插入数据时很少进行UPDATE或DELETE操作。它是一个数据存档系统,我们每天都在其中插入历史记录。我们将根据用户要求在此历史记录上生成不同类型的报告,因此我们有些顾虑,需要技术投入和建议。 管理此类存档表和数据库的最佳方法是什么?


1
SQL Server中的B树节点拆分策略可单调增加价值
考虑一个将始终单调增加的值的B树索引,例如IDENTITY类型的列。使用传统的B树实现,每当一个节点满时,它将被拆分50%/ 50%,最后我们得到一个B树,其中几乎所有节点都只有50%满。 我知道Oracle发现何时值会不断增加,在这种情况下,Oracle会执行90%/ 10%的拆分。这样,(几乎)所有节点都将充满90%的数据,对于这些非常常见的情况,页面利用率要高得多。 我无法在SQL Server中找到类似功能的文档。但是,我进行了两个实验,分别在索引中插入了N个随机整数和N个连续整数。前一种情况使用了更多的页面,而后者则使用了更多页面。 SQL Server是否提供类似的功能?如果是这样:您能指出我一些有关此功能的文档吗? 更新: 通过下面提供的实验,叶节点似乎保持未分裂状态,内部节点分裂了50%/ 50%。这使得递增键上的B树比随机键上的树更紧凑。但是,Oracle提出的90%/ 10%的方法甚至更好,我仍然在寻找一些官方文档来验证实验中看到的行为。

1
为什么在列上运行ALTER TABLE会使它从NOT NULL变为NULL?
我正在大规模更新SQL Server数据库。我将所有numeric(38,0)列更改为int (是的,SQL Server脚本是从Oracle脚本创建的)。使用SMO和C#(我是一名软件工程师),我设法生成了非常不错的脚本,如SQL Server Management Studio。除了一个特定的问题,所有这些工作都非常好: 对于少数几个表,当我调用ALTER TABLE [myTable] ALTER COLUMN [columnA] INT它时,它决定还更改的列NOT NULL to NULL。这当然是一个巨大的问题,因为我需要为那些特定列上的大多数表重新生成主键。 显然,我在使用SMO时有很多选择,可以找出哪些列是主键,并在更新数据类型后或更新时将它们强制为NOT NULL,但我真的很好奇这可能是什么原因。

2
如何用联接替换where子句?
通常,当我看到使用类似以下内容的SQL时: select * from employees where epmloyeeTypeId in (select id from type where name = 'emp') 我将其替换为where: select e.* from employees e inner join type t on t.id=e.epmloyeeTypeId and t.name = 'emp' 如果逆是子句not in(如下面)而不是in子句,是否可以对逆做同样的事情? INSERT into Subscriptions(ProjectId, RecordTypeCID, NTID, Active, Added, LastUpdate, UpdateBy) SELECT @ProjectId, RecordTypeCID, @NTID, 1, GETDATE(), GETDATE(), …

1
完整计划缓存行为
在SQL Server 2005中,当计划缓存填满时会发生什么?我进行了一些研究,从收集的点点滴滴来看,似乎已给缓存的计划指定了“年龄”,其中包括其权重或编译成本乘以自缓存以来已运行的次数。随着时间的流逝,该年龄逐渐减少,直到达到0,然后才被视为“老化”,并在需要时成为冲洗对象。计划缓存填满后,会从缓存中清除过期的计划。 幕后是否还有其他事情使这种情况复杂化? 谢谢, 马特

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.