随笔分类 -  mssql

摘要:--droptabletestCREATETABLEtest(nameVARCHAR(12),scoresINT)INSERTINTOtestSELECT'周杰伦',230UNIONSELECT'周星驰',100UNIONSELECT'成龙',150UNIONSELECT'李连杰',200UNIONSELECT'莉莉',260SELECT*FROMtest/*namescores成龙150莉莉26... 阅读全文
posted @ 2010-10-30 13:21 qanholas 阅读(274) 评论(0) 推荐(0) 编辑
摘要:/*CREATETABLEA(idINT,NAMEVARCHAR(30))CREATETABLEB(idINT,marksVARCHAR(30))INSERTINTOASELECT1,'周杰伦'unionSELECT2,'周星驰'unionSELECT3,'成龙'unionSELECT4,'李连杰'unionSELECT5,'洪金宝'unionSELECT6,nullunionSELECT7,nu... 阅读全文
posted @ 2010-10-30 12:26 qanholas 阅读(425) 评论(0) 推荐(0) 编辑
摘要:/*CREATETABLEA(idINT,NAMEVARCHAR(30))CREATETABLEB(idINT,marksVARCHAR(30))INSERTINTOASELECT1,'周杰伦'unionSELECT2,'周星驰'unionSELECT3,'成龙'unionSELECT4,'李连杰'unionSELECT5,'洪金宝'unionSELECT6,'李嘉诚'unionSELECT7,'... 阅读全文
posted @ 2010-10-30 11:46 qanholas 阅读(501) 评论(0) 推荐(0) 编辑
摘要:createtable#tb(abit,bbit,cbit)insertinto#tbexecmaster..xp_fileexist'c:\boot.ini'--c:\boot.ini是要检查的文件名ifexists(select*from#tbwherea=1)print'有该文件'elseprint'无该文件'droptable#tb 阅读全文
posted @ 2010-10-26 18:49 qanholas 阅读(167) 评论(0) 推荐(0) 编辑
摘要:IFEXISTS(SELECT1FROMsysobjectsWHEREname='sp_spaceused2'ANDTYPE='P')DROPPROCEDUREsp_spaceused2GOCREATEPROCEDURESp_spaceused2(@typeVARCHAR(2)='U',--Theobjectstypewewantsizeon.@updateusageVARCHAR(5)=fals... 阅读全文
posted @ 2010-10-26 18:46 qanholas 阅读(729) 评论(0) 推荐(0) 编辑
摘要:--1.while循环declare@iasintset@i=0while(@i<1000000)begininsertintonumbersvalues(@i)set@i=@i+1end--极度慢--2.6表卡迪尔DECLARE@tTABLE(NUMBERINT)INSERTINTO@tSELECT0UNIONALLSELECT1UNIONALLSELECT2UNIONALLSELECT3... 阅读全文
posted @ 2010-10-26 11:39 qanholas 阅读(461) 评论(0) 推荐(0) 编辑
摘要:sql server中数据存储的基本单位是页。为数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到n连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。区是八个物理上连续的页的集合,用来有效地管理页。所有页都存储在区中。在 SQL Server 中,页的大小为 8 KB。这意味着 SQL Server 数据库中每 ... 阅读全文
posted @ 2010-10-26 10:17 qanholas 阅读(347) 评论(0) 推荐(0) 编辑
摘要:由于SqlServer对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),SqlServer才会释放一点点内存。所以很多时候,我们会发现运行SqlServer的系统内存往往居高不下。这些内存一般都是SqlServer运行时候用作缓存的,例如你运行一个select语句,那么SqlServer会将相关的数据页(SqlServer操作的数据都是以页为单位的)加载到内存... 阅读全文
posted @ 2010-10-26 09:51 qanholas 阅读(1178) 评论(1) 推荐(0) 编辑
摘要:SET STATISTICS IO ON 命令是一个 使 SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。 我们在分析索引性能的时候,会非常有用。 启用了这个属性后,我们在执行 SQL 语句后,会收到类似如下的信息,这有利于我们分析SQL的性能: (3999 row(s) affected)表 'ChargeCL'。扫描计数 1,逻辑读取 9547 次,物理... 阅读全文
posted @ 2010-10-25 23:55 qanholas 阅读(447) 评论(0) 推荐(0) 编辑
摘要:相同点:truncate和不带where子句的delete,以及drop都会删除表内的数据不同点:1.truncate和delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。2.delete语句是数据库操作语言(dml),这个操作会放到ro... 阅读全文
posted @ 2010-10-25 21:34 qanholas 阅读(283) 评论(0) 推荐(0) 编辑
摘要:IFOBJECT_ID('test_indexorder','U')ISNOTNULLBEGINTRUNCATETABLEtest_indexorderDROPTABLEtest_indexorderENDgoCREATETABLEtest_indexorder(idINTIDENTITY(1,1)NOTNULL,nameVARCHAR(20)NOTNULL,contentVARCHAR(50)N... 阅读全文
posted @ 2010-10-25 21:23 qanholas 阅读(431) 评论(0) 推荐(0) 编辑
摘要:在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQL Server应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简单的使用了临时表。实际上临时表和表变量都有特定的适用环境。 ... 阅读全文
posted @ 2010-10-25 21:10 qanholas 阅读(256) 评论(0) 推荐(0) 编辑
摘要:静态游标静态游标 (Static Cursor) 是利用暂存资料表作为储存结果集空间的一种游标,它可以让应用程式可以快速的存取结果集,但在静态游标开启期间,任何对资料表所做的变更都不会反映在结果集中;同时,在静态游标中所作的修改,无法反映到资料库中,此种游标是消耗资源度第三的游标。 Defines a cursor that makes a temporary copy of the data t... 阅读全文
posted @ 2010-10-25 19:01 qanholas 阅读(1488) 评论(0) 推荐(1) 编辑
摘要:--1.FORUPDATE,更新不允许的列,出错,游标有FORUPDATE列表,但请求更新的列不在此列表中DECLAREmycursorCURSORFORSELECT*FROMaa1FORUPDATEOF生成工号--DECLAREmycursorCURSORFORSELECT*FROMaa1FORUPDATEOPENmycursorFETCHNEXTFROMmycursorUPDATEaa1SET... 阅读全文
posted @ 2010-10-25 18:16 qanholas 阅读(770) 评论(0) 推荐(0) 编辑
摘要:数据表在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_SQL 选择语句相关联,因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。 当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用... 阅读全文
posted @ 2010-10-25 13:36 qanholas 阅读(934) 评论(0) 推荐(0) 编辑
摘要:SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将... 阅读全文
posted @ 2010-10-24 22:11 qanholas 阅读(127697) 评论(13) 推荐(25) 编辑
摘要:1. group by all 我们使用SQL Server 2005自带的AdventureWorks数据库的Production.Product表进行演示。首先看不使用all关键字的情形:SELECTsafetystocklevel , COUNT(productid) AS productcount FROM Production.ProductWHERE finishedgoodsflag... 阅读全文
posted @ 2010-10-24 18:08 qanholas 阅读(1817) 评论(0) 推荐(0) 编辑
摘要:--1.CREATETABLETableXml(idINTIDENTITY(1,1)PRIMARYKEY,xXML)GoINSERTINTOTableXmlSELECT'<root><Infoid="1"name="Name1"City="City1"/><Infoid="2"name="Name2"City="City2"/><Infoid="3"nam... 阅读全文
posted @ 2010-10-15 23:12 qanholas 阅读(463) 评论(0) 推荐(0) 编辑
摘要:MSSQL数据库存在几个危险的扩展存储过程,默认Public组可执行权限,SQL注入者可利用此读取文件目录及用户组,并可通过先写入数据库然后导出为文件的方法往服务器写入危险脚本进一步提权,或直接使用某些存储过程执行命令,如xp_cmdshell。这些存储过程如下:sp_makewebtask xp_cmdshell xp_dirtree xp_fileexist xp_terminate_proc... 阅读全文
posted @ 2010-10-15 11:58 qanholas 阅读(304) 评论(0) 推荐(0) 编辑
摘要:--1.cte版本,限制100级递归ifobject_id(N'getroot')>0dropfunctiongetrootGOcreatefunctiongetroot(@nootIDint,@isrootint--0为找子节点,其他为找父节点)returnstableasreturnwithtroot(id,ParentId,cityname)as(selectid,ParentId,c... 阅读全文
posted @ 2010-09-19 23:07 qanholas 阅读(695) 评论(0) 推荐(0) 编辑