-
SQL命令优化需要记住的9点事项
与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤。以sqlserver为例,当数据库收到一条查询语句时,语法分析器会扫描sql语句并将其分成逻辑单元(如关键词、表达式、运算符和标识符)并生成查询树,最后查询优化器将分析所有可以访问数据库的源表的方法,从中选择一组返回结果集最快且消耗资源较少的步骤...
数据库操作教程 2022-09-23 17:29:51 -
SQLServer2000升级到SQLServer2008性能之需要注意的地方之一
测试sql:复制代码代码如下:SETSTATISTICSIOONSETSTATISTICSTIMEONSELECTCOUNT(1)FROMdbo.tbtextaINNERLOOPJOINdbo.tbtextbONa.id=b.idoption(maxdop1)SETSTATISTICSIOOffSETSTATISTICSTIMEOff表结构:复制代码代码如下:CREATETABLE[dbo].[tbtext]([id][int]IDENTITY(1,1)NOTNULL,[VALUE][int]NULL)ON[PRIMARY]单这句测试,看执行计划根本看不出区别。|--ComputeScalar(DEFINE:([Expr1006]=CONVERT_IMPLICIT(int,[Expr1009],0)))|--StreamAggregate(DEFINE:([Expr1009]=Count(*)))|--NestedLoops(InnerJoin,WHERE:([northwind].[dbo].[tbtext].[id]as[b].[id]=[northwind].[dbo].[tbt...
数据库操作教程 2022-09-23 17:15:01 -
SQLServer复制需要有实际的服务器名称才能连接到服务器
今天在做sqlServer2005的实验的时候碰到的问题,问题描述很清楚,怀疑是我以前给计算机修改了名称而导致的.可以用select@@servername和selectserverproperty('servername')对照一下,两个的结果是否一样,不一样就会出现问题,以下给出解决的SQL脚本复制代码代码如下:ifserverproperty('servername')<>@@servernamebegindeclare@serversysnameset@server=@@servernameexecsp_dropserver@server=@serverset@server=cast(serverproperty('servername')assysname)execsp_addserver@server=@server,@local='LOCAL'end执行之后,重新sql即可解决这个问题...
数据库操作教程 2022-09-23 17:10:31 -
sqlserver通用的删除服务器上的所有相同后缀的临时表
复制代码代码如下:usetempdbifobject_id('tempdb..#table')isnotnulldroptabletempdb..#tableselectnameintotempdb..#tablefrom(select*fromsysobjectswherextype='U')awherea.namelike'%test_select'declare@tablevarchar(100),@countintselect@count=count(name)fromtempdb..#tablewhile(@count>0)beginselecttop1@table=namefromtempdb..#tableexec('ifobject_id('''+@table+''')isnotnulldroptable'+@table+'deletefromtempdb..#tablewherename='''+@table+'''')set@count=@count-1enddroptabletempdb..#table建议:尽量不要大量使用临时表,因为使用tempdb库会使...
数据库操作教程 2022-09-23 17:09:11 -
SQLServer误区30日谈第12天TempDB的文件数和需要和CPU数目保持一致
误区#12:TempDB的文件数和需要和CPU数目保持一致错误 哎,由于上述误区是微软“官方”的建议,并且还有大量博文坚持这个观点,这个误区已经是老生常谈。 但让人困惑的是SQLCAT团队给出的建议就是1:1,但这个建议是源自扩展方面的原理来说,而不是一个通用法则...
数据库操作教程 2022-09-23 17:07:06 -
SQL临时表递归查询子信息并返回记录的代码
复制代码代码如下:declare@Q_IDuniqueidentifierset@Q_ID=dbo.uf_GetParamValueByName(@Params,'@指标ID');declare@QAExp_IDchar(36)--指标属性公式IDset@QAExp_ID='3D2B8F3F-0B7E-46FD-9B33-050F846C2869'declare@temp_qidtable(QIDchar(36),ExpValuenvarchar(max))--临时表变量获得指标根IDdeclare@QIDtempchar(36),@expressnvarchar(4000)declare@kint=2--层次declare@patternnvarchar(2)='ID'--指标公式拆分字段declare@charidexint--指标对应的索引if(@OPType='根据指标ID查找公式所有子指标')begincreatetable#TempQuotaStruct--创建临时表#TmpStruct(QIDchar(36),--创建一个ID用来存储指标IDPIDchar(36),--用...
数据库操作教程 2022-09-23 17:04:04 -
case嵌套查询与连接查询你需要懂得
1、Case子查询连接查询复制代码代码如下:select*fromscorecreatedatabasedemousedemocreatetable[user]([uId]intidentity(1,1)primarykey,[name]varchar(50),[level]int--1骨灰大虾菜鸟)insertinto[user](name,level)values('犀利哥',1)insertinto[user](name,level)values('小月月',2)insertinto[user](name,level)values('芙蓉姐姐',3)--caseend单值判断相当于switchcase--then后面的返回值类型必须一致select[name],case[level]when1then'骨灰'when2then'大虾'when3then'菜鸟'endas'等级'from[user]useMySchoolselect*fromscore--caseend第二种用法,相当于多重if语句selectstudentId,casewhenenglish>=90then...
数据库操作教程 2022-09-23 17:04:01 -
SQLServer误区30日谈第20天破坏日志备份链之后,需要一个完整备份来重新开始日志链
误区#20:在破坏日志备份链之后,需要一个完整备份来重新开始日志链错误事务日志备份会备份自上次事务日志备份以来所有的事务日志(如果从来没有过日志备份的话,那就从上一次完整备份开始)。有好几种类型的操作会中断事务日志的连续性,也就是说除非重新开始新的日志链,SQLServer无法再进行日志备份...
数据库操作教程 2022-09-23 17:03:48 -
根据多条件查询临时表想得到不同结果集的方法
当我写下如下sql语句时,我得到了输入@c参数时想得到的结果集。select*[email protected](selectidfromtbwheref=@c)但如果有@a,@b,@c,而它们分别想从@tb中得到不同的结果集,例如复制代码代码如下:if@aisnotnullbegin--得到@a想得到的endif@bisnotnullbegin--得到@b想得到的endif@cisnotnullbegin--得到@c想得到的end这样做好像没什么问题,但如果@a和@b是一起的,甚至是@a,@b,@c,@d,@e,@f等等N多种条件组合,这样就不好办了...
数据库操作教程 2022-09-23 16:53:56 -
SQLServer2008到底需要使用哪些端口?
下面就来介绍下SQLServer2008中使用的端口有哪些: 首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果我们要远程连接数据库引擎,那么就需要打开该端口...
数据库操作教程 2022-09-23 16:49:33 -
编写SQL需要注意的细节Checklist总结
复制代码代码如下:/*--注意:准备数据(可略过,非常耗时)CREATETABLECHECK1_T1(IDINT,C1CHAR(8000))CREATETABLECHECK1_T2(IDINT,C1CHAR(8000))DECLARE@IINTSET@I=1WHILE@I<=10000BEGININSERTINTOCHECK1_T1SELECT@I,'C1'INSERTINTOCHECK1_T2SELECT10000+@I,'C1'SET@I=@I+1ENDCREATETABLECHECK2_T1(IDINT,C1CHAR(8000))DECLARE@IINTSET@I=1WHILE@I<=10000BEGININSERTINTOCHECK2_T1SELECT@I,'C1'SET@I=@I+1ENDINSERTINTOCHECK2_T1VALUES(10001,'C2')INSERTINTOCHECK2_T1VALUES(10002,'C1')CREATETABLECHECK3_T1(IDINT,C1CHAR(7000))CREATETABLECHECK3_T2(IDINT...
数据库操作教程 2022-09-23 16:48:48