随笔分类 -  SQL SERVER

摘要:Sql Server2005数据库自带一个排序函数ROW_NUMBER(),列表为:语法:row_number() : over(子句)1.使用row_number()函数进行编号:select row_number() over(order by Sage) id ,* from Student原理:先按Sage进行排序,排序完后,给每条数据进行编号。注:在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行。结果为:2.使用row_number()函数进行统计:select row_number() over(partitio 阅读全文
posted @ 2012-03-20 14:48 佳园 阅读(8417) 评论(0) 推荐(3) 编辑
摘要:在sql server中,我们经常能用到连接,今天总结一下连接的基础知识。连接的分类:交叉连接CROSSJOIN内连接INNERJOIN外连接{左外连接LEFT [OUTER] JOIN;右外连接RIGHT [OUTER]JOIN;全外连接full [outer]join}自连接以下通过例子来了解各个连接的异同点:有两张表Teacher表和Course表:交叉连接:1.如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;select * from Course cross join Teacher结果为:由此结果可知,它的结果与 SELECT * 阅读全文
posted @ 2012-01-16 15:31 佳园 阅读(5439) 评论(0) 推荐(4) 编辑
摘要:/*描述:将如下形式的数据按id字段合并value字段。id value----- ------1 aa1 bb2 aaa2 bbb2 ccc需要得到结果:id value------ -----------1 aa,bb2 aaa,bbb,ccc即:group by id, 求 value 的和(字符串相加)*/--1、sql2000中只能用自定义的函数解决create table tb(id int, value varchar(10))insert into tb values(1, 'aa')insert int... 阅读全文
posted @ 2011-09-15 16:22 佳园 阅读(628) 评论(0) 推荐(0) 编辑
摘要:有一个这样的字符串 1Q,1T,1Q,1m,1m,1m,1Q,1P,2T,1R怎样显示结果为3Q+3T+3m+1P+1Rcreate function dbo.fn_split (@inputstr varchar(8000), @seprator varchar(10))returns @temp table (a varchar(200))as begindeclare @i intset @inputstr = rtrim(ltrim(@inputstr))set @i = charindex(@seprator, @inputstr)while @i >= 1begininser 阅读全文
posted @ 2011-09-15 15:54 佳园 阅读(1064) 评论(0) 推荐(0) 编辑
摘要:--递归删除父节点及所有子节点create table tb(Id int, ParentId int, Name varchar(5))insert into tb select 1, 0, 'a1' union all select 2,2, 'a2' union all select 14, 1, 'b11' union all select 15, 1, 'b12' union all select 16, 14, 'c13' union all select 17, 14, 'c14'un 阅读全文
posted @ 2011-09-02 14:37 佳园 阅读(1960) 评论(0) 推荐(0) 编辑
摘要:/* 本文由微软新闻组摘录下来的。一段非常有用的脚本。如果碰到日志文件过大的问题,用SHIRNK DATABASE, TRUNCATE LOG FILE不是很有效时,可以考虑试下下面的脚本。把代码COPY到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可*/----------------------------------------------------------------------------------SET NOCOUNT ONDECLARE @LogicalFileName sysname, --日志文件名@Max... 阅读全文
posted @ 2011-09-02 14:36 佳园 阅读(665) 评论(0) 推荐(0) 编辑
摘要:/*标题:分解字符串并查询相关数据作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-03-18地点:广东深圳说明:通过使用函数等方法分解字符串查询相关数据。问题:通过分解一个带某种符号分隔的字符串在数据库中查找相关数据。例如 @str = '1,2,3',查询下表得到记录1,4,5,6ID TypeID1 1,2,3,4,5,6,7,8,9,10,11,122 2,3 3 3,7,8,9 4 2,6 5 4,56 6,7 */-----------------------------create table tb (ID int , TypeID varch 阅读全文
posted @ 2011-09-02 14:34 佳园 阅读(348) 评论(0) 推荐(0) 编辑
摘要:DECLARE @dt datetime SET @dt=GETDATE() DECLARE @number int SET @number=3 --1.指定日期该年的第一天或最后一天 --A. 年的第一天 SELECT CONVERT(char(5),@dt,120)+ '1-1 ' --B. 年的最后一天 SELECT CONVERT(char(5),@dt,120)+ '12-31 ' --2.指定日期所在季度的第一天或最后一天 --A. 季度的第一天 SELECT CONVERT(datetime, CONVERT(char(8), DATEADD(Mo 阅读全文
posted @ 2011-09-02 14:32 佳园 阅读(565) 评论(0) 推荐(0) 编辑
摘要:有表tb,如下:idvalue----------------------1aa,bb2aaa,bbb,ccc欲按id,分拆value列,分拆后结果如下:idvalue-------------------1aa1bb2aaa2bbb2ccc1.旧的解决方法(sqlserver2000)SELECTTOP8000id=IDENTITY(int,1,1)INTO#FROMsyscolumnsa,syscolumnsbSELECTA.id,SUBSTRING(A.[values],B.id,CHARINDEX(',',A.[values]+',',B.id)-B.i 阅读全文
posted @ 2011-09-02 14:29 佳园 阅读(458) 评论(0) 推荐(0) 编辑
摘要:数据如下:name val memoa 2 a2(a的第二个值)a 1 a1--a的第一个值a 3 a3:a的第三个值b 1 b1--b的第一个值b 3 b3:b的第三个值b 2 b2b2b2b2b 4 b4b4b 5 b5b5b5b5b5*/--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a', 2, 'a2(a的第二个值)')insert into tb values... 阅读全文
posted @ 2011-09-02 14:27 佳园 阅读(432) 评论(0) 推荐(0) 编辑
摘要:分解字符串包含的信息值后然后合并到另外一表的信息/*问题描述tbaIDclassid nametbb 1 1,2,3 西服 2 2,3 中山装3 1,3 名裤id classname1 衣服2 上衣3 裤我得的结果是id classname name1 衣服,上衣,裤子 西服 2 上衣,裤子 中山装3 衣服,裤子 名裤*/-------------------------------------------------------sql server 2000中的写法create table tba(ID int,classid varchar(20),name varchar(10))in. 阅读全文
posted @ 2011-08-08 16:53 佳园 阅读(488) 评论(0) 推荐(0) 编辑
摘要:有表tb, 如下:id value----- ------1 aa1 bb2 aaa2 bbb2 ccc需要得到结果:id values------ -----------1 aa,bb2 aaa,bbb,ccc即, group by id, 求 value 的和(字符串相加)1. 旧的解决方法-- 1. 创建处理函数create function dbo.f_str(@id int)returns varchar(8000)asbegin declare @r varchar(8000) set @r = '' select @r = @r + ',' + v 阅读全文
posted @ 2011-07-15 09:50 佳园 阅读(1095) 评论(0) 推荐(1) 编辑
摘要:什么是游标:游标是可以在结果集中上下游动的指针。游标的作用:--允许定位到结果集中的特定行。--从结果集的当前位置检索一行或多行数据。--支持对结果集中当前位置的行进行修改。注意:游标虽然很好用,但是如果滥用游标的话,会对程序的性能造成很大影响,使用的时候一定要谨慎啊!游标的种类:MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标。(1) Transact_SQL 游标Transact_SQL 游标是由declare cursor语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Transact_SQL 游标主要用在 阅读全文
posted @ 2011-07-14 15:52 佳园 阅读(5543) 评论(2) 推荐(5) 编辑
摘要:事务是对数据库执行的一个操作单位。事务的本质特征:所有的事务都有开始和结束;事务可以被保存或撤销;如果事务在中途失败,事务中的任何部分都不会被记录到数据库控制事务当一个事务被执行并成功完成时,虽然从输出结果来看目标表已经被修改了,但实际上目标表并不是立即被修改。当事务成功完成时,利用事务控制命令最终认可这个事务,可以把事务所做的修改保存到数据库,也可以撤销事务所做的修改。commit命令commit命令用于把事务所做的修改保存到数据库,它把上一个commit或rollback命令之后的全部事务都保存到数据库。在执行 commit transaction语句后不能回滚事务。rollback命令r 阅读全文
posted @ 2011-07-13 16:37 佳园 阅读(4725) 评论(1) 推荐(5) 编辑
摘要:视图的概念视图就是一张虚拟的表。视图在外观和行为上都类似于表,但它不需要实际的物理存储。当创建一个视图时,实际上是在数据库里执行了一个select语句。警告:如果用于创建视图的表被删除了,那么这个视图就不可访问了。如果对这个视图做查询,就会收到错误信息。创建视图create view view_name as sql_sentence执行语句 select * from view_nameWith Check Option这是Create View语句里的一个选项,其目的是确保全部的Update和Insert语句满足视图定义里的条件。例如:create view view_scoreas se 阅读全文
posted @ 2011-07-13 09:59 佳园 阅读(914) 评论(0) 推荐(2) 编辑
摘要:简单来说,索引就是一个指针,指向表里的数据。创建索引create indext index_name on table_name删除索引drop index index_name on table_name索引的类型单字段索引create indext index_name on table_name(column_name)如果某个字段单独在Where子句作为单独的查询条件,它的单字段索引是最有效的。唯一索引create unique indext index_name on table_name(column_name)唯一索引不允许表里有重复值,且column_name不能是主键。组合索 阅读全文
posted @ 2011-07-12 16:42 佳园 阅读(653) 评论(0) 推荐(1) 编辑
摘要:删除重复记录有大小关系时,保留大或小其中一个记录--> --> (Roy)生成測試數據if not object_id('Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2))Insert #Tselect 1,N'A',N'A1' union allselect 2,N'A',N'A2' union allselect 3,N'A',N' 阅读全文
posted @ 2011-07-11 15:06 佳园 阅读(533) 评论(0) 推荐(2) 编辑
摘要:一、创建一个简单的触发器触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的数据库。创建触发器用 CREATE TRIGGERCREATE TRIGGER 触发器名称ON 表名FOR INSERT、UPDATE 或 DELETEAS T-SQL 语句注意:触发器名称是不加引号的。 阅读全文
posted @ 2011-06-20 09:36 佳园 阅读(1109) 评论(0) 推荐(1) 编辑
摘要:空值处理coalesce( expression [ ,...n ] )返回其参数中第一个非空表达式。Select coalesce(null,null,'1','2') //结果为 1coalesce(expression1,...n) 与此 case函数等效:CASE WHEN (expression1 IS NOT NULL) THEN expression1 ... WHEN (expressionN IS NOT NULL) THEN expressionN ELSE NULLEND注意:当第一个表达式为字符串且不能转化为整数时,若在后面的表达式中有整 阅读全文
posted @ 2011-06-17 16:31 佳园 阅读(7344) 评论(0) 推荐(2) 编辑
摘要:类型转换cast ( expression as data_type [ (length ) ])convert ( data_type [ ( length ) ] , expression [ , style ] )如果未指定 length,则默认为 30 个字符。select cast(GetDate() as nvarchar) //结果为:06 17 2011 1:38PMselect convert(nvarchar ,GetDate(),110) //结果为: 06-17-2011style:数据格式的样式,用于将... 阅读全文
posted @ 2011-06-17 14:25 佳园 阅读(18606) 评论(0) 推荐(1) 编辑