![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL Server
fanzhonglei
这个作者很懒,什么都没留下…
展开
-
经常用到的交叉表问题 一般用动态SQL能生成动态列
原始表如下格式: Class CallDate CallCount 1 2005-8-8 40转载 2008-04-18 15:26:00 · 573 阅读 · 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 s原创 2008-09-25 14:05:00 · 2221 阅读 · 0 评论 -
50个Sql语句,学习啊!
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#=001) a,(sel原创 2008-09-25 14:15:00 · 945 阅读 · 0 评论 -
查询数据表中重复的数据
在测试中,经常会对程序中某一功能进行反复的测试,进而导致数据表中产生了除主键以外的重复数据。我们如何找出这些重复的数据呢? 其实可以用很简单SQL语句将其查询出来。如果想查询数据表中某一个字段重复(这里假设这个字段名是ID1),可以使用以下SQL语句。select Table1.* from Table1 right join (select ID1 From Table原创 2008-09-25 14:52:00 · 718 阅读 · 0 评论 -
分解字符串并查询相关数据
/*标题:分解字符串并查询相关数据作者:范中磊说明:通过使用函数等方法分解字符串查询相关数据。问题:通过分解一个带某种符号分隔的字符串在数据库中查找相关数据。例如 @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 */----------原创 2008-09-25 12:50:00 · 667 阅读 · 0 评论 -
返程问题 找出雇员从本地出发后直接返回的情况
--返程问题,找出雇员从本地出发后直接返回的情况create table trav(name nvarchar(10),date datetime,comefrom nvarchar(10),destin nvarchar(10),id int)insert into trav select 张三,2007-01-01,上海,广州,1insert into trav select原创 2008-09-25 12:59:00 · 563 阅读 · 0 评论 -
库存先进先出简单例子
--库存先进先出简单例子:create table t(id int identity(1,1),name varchar(50),--商品名称j int, --入库数量c int, --出库数量jdate datetime --入库时间)insert into t(name,j,c,jdate) select A,100,0,2007-12-01insert原创 2008-09-25 13:02:00 · 1380 阅读 · 0 评论 -
SQL优化-索引
(一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别: 其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字转载 2008-10-16 10:34:00 · 535 阅读 · 0 评论 -
50种方法巧妙优化你的SQL Server数据库
查询速度慢的原因很多,常见如下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序转载 2008-10-16 10:54:00 · 558 阅读 · 0 评论 -
数据库的查询优化技术(摘)
数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往转载 2008-10-16 11:04:00 · 497 阅读 · 0 评论 -
分拆列值
分拆列值 有表tb, 如下: id value ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc 欲按id,分拆value列, 分拆后结果如下: id value ----------- -------- 1 aa 1 bb 2 a原创 2008-09-25 12:24:00 · 523 阅读 · 0 评论 -
防止SQL注入式攻击
SQL注入式攻击是指利用设计上的漏洞,在目标服务器上运行SQL命令以及进行其他方式的攻击,动态生成SQL语句时没有对用户输入的数据进行验证。SQL注入式攻击是一种常规性的攻击,可以允许一些不法用户检索他人的数据,改变服务器的设置,或者在他人不小心的时候破坏其服务器。SQL注入式攻击不是SQL Server问题,而是不适当的程序。要防范SQL注入式攻击,应该注意以下几点。(1)检查输入的SQ转载 2008-10-06 11:37:00 · 641 阅读 · 0 评论 -
索引的基本原理以及数据是如何被访问的
(一)SQLS如何访问没有建立索引的数据表 Heap译成汉语叫做“堆”,其本义暗含杂乱无章、无序的意思,前面提到数据值被写进数据页时,由于每一行记录之间并没有特定的排列顺序,所以行与行的顺序就是随机无序的,当然表中的数据页也就是无序的了,而表中所有数据页就形成了“堆”。可以说,一张没有索引的数据表,就像一个只有书柜而没有索引卡片柜的图书馆,书库里面塞满了一堆乱七八糟的图书。当读者对管理员提交查转载 2008-10-16 10:15:00 · 543 阅读 · 0 评论 -
数据库索引介绍及使用
一、索引的概念 索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。二、索引的特点 1.索引可以加快数据库的检索速度 2.索引降低了数据库插入、修改、删除等维护任务的速度 3.索引创建在表上,不能创建在视图上转载 2008-11-27 13:47:00 · 1803 阅读 · 0 评论 -
SQL Server 2005对海量数据处理
数据库基础 SQL Server 2005对海量数据处理 SQL Server 2005对海量数据处理 超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。这不但影响着数据库的运行效率,也增大数据库的维护难度。除了表的数据量外,对表不同的访问模式也可能会影响性能和可用性。这些问题都可以通过对大转载 2008-11-27 13:49:00 · 896 阅读 · 0 评论 -
SQL分页查询
关于SQL语句分页,网上也有很多啦,我贴一部分过来,并且总结自己已知的分页到下面,方便日后查阅。 方法1: 适用于 SQL Server 2000/20051 SELECT TOP 页大小 *2 FROM table13 WHERE id NOT IN4 (5 SELECT TOP 页大小*(页数-1) id FROM tab转载 2011-11-29 10:33:28 · 798 阅读 · 0 评论 -
日志压缩脚本
/* 本文由微软新闻组摘录下来的。一段非常有用的脚本。如果碰到日志文件过大的问题,用SHIRNK DATABASE, TRUNCATE LOG FILE不是很有效时,可以考虑试下下面的脚本。把代码COPY到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可*/-------------------------------------------------原创 2008-09-25 13:59:00 · 637 阅读 · 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 --原创 2008-09-25 13:52:00 · 616 阅读 · 0 评论 -
合并列值
合并列值 表结构,数据如下: id value ----- ------ 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到结果: id values ------ ----------- 1 aa,bb 2 aaa,bbb,ccc 即:group by id, 求 value 的和(字符串相加) 1. 旧的解决方法(在s原创 2008-09-25 12:22:00 · 595 阅读 · 0 评论 -
交叉表 通用存储过程
CREATE proc p_qry @TableName sysname, --表名 @纵轴 sysname, --交叉表最左面的列 @横轴 sysname, --交叉表最上面的列 @表体内容 sysname, --交叉表的数数据字段 @是否加横向合计 bit,--为1时在交叉表横向最右边加横向合计转载 2008-04-18 17:37:00 · 658 阅读 · 0 评论 -
一道IBM笔试题 按季度统计
Can you create a cross-tab report in my SQL Server!How can I get the report about sale quality for each store and each quarter and the total sale quality for each quarter at year 1993?You can use the原创 2008-04-18 22:50:00 · 762 阅读 · 0 评论 -
查询当月天数
查询当月天数:select datepart(day,dateadd(day,-1,dateadd(month,1,cast(cast(year(getdate()) as varchar)+-+cast(month(getdate()) as varchar)+-01 as datetime))))原创 2008-04-18 10:51:00 · 641 阅读 · 0 评论 -
树形数据的处理
表结构描述及数据环境:表名tb,如果修改表名,则相应修改所有数据处理中涉及到的表名tbid为编号(标识字段+主键),pid为上级编号,name为名称,后面可以自行增加其他字段. 凡是未特殊标注的地方,对自行增加的字段不影响处理结果 测试数据create table tb(id int identity(1,1) not null constraint PK_tb primary key转载 2008-08-03 15:21:00 · 522 阅读 · 0 评论 -
SQL JOIN 的用法
SQL JOIN 的用法 关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2: create table table1(id int,name varchar(10)) create table table2(id int,score int) insert into table1 select转载 2008-08-04 10:03:00 · 669 阅读 · 0 评论 -
SQL常用的函数
SQL Server提供了大量的函数, 但是在一些常见的如, 字符串拆分, 字符提取,过滤等没有对应的处理, 本帖主要收集一些常见的函数, 整理如下: ------------------------------ http://topic.csdn.net/u/20080306/23/d3c100f2-cda1-4efa-927d-f1f7968884ce.html /* 功能:拆分字符串. 作者转载 2008-08-04 13:09:00 · 889 阅读 · 1 评论 -
SQL分割字符串 类似 C# Split
SQL分割字符串 类似 C# Split createfunction [dbo].[split](@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp table(F1 varchar(100))asbegindeclare @i intset @SourceSql=rtrim(l原创 2008-06-10 17:46:00 · 1128 阅读 · 1 评论 -
SQL Server 2005 函数
聚合函数若要汇总一定范围的数值,请使用以下函数: SUM 返回表达式中所有值的总和。 语法 SUM(aggregate)SUM 只能与包含数值的字段一起使用。将忽略空值。AVERAGE 返回表达式中所有非空值的平均值(算术平均值)。语法 AVERAGE(aggregate)AVERAGE 只能与包含数值的字段一起使用。将忽略空值。转载 2008-09-05 10:43:00 · 3391 阅读 · 1 评论 -
李洪根谈分页存储过程
作者:李洪根 微软MVP 1。我个人认为最好的分页方法是: Select top 10 * from table where id>200写成存储过程,上面的语句要拼一下sql语句,要获得最后大于的哪一个ID号2。那个用游标的方式,只适合于小数据量的表,如果表在一万行以上,就差劲了你的存储过程还比不上NOT IN分页,示例:SELECT Top 10 * FR转载 2008-09-10 10:35:00 · 539 阅读 · 0 评论 -
SQL Server 2005:ReportingServices 创建(基础)
1.打开BIDS,这是报表开发工具2.新建项目3.选择“商业智能项目”,选择“报表服务器项目向导”4.弹出新窗口“报表向导”,选择下一步5.进入数据源选择的窗口,点击“编辑”6.点击“编辑”弹出选择数据源和数据表的窗口,这个窗口大家都很熟悉对吧?7.点击“测试连接”。8.点击“确定”。回到“选择数据源”的窗口。选择“使其成为共享数据源”。这样这个数据源可以为其他报表所用原创 2008-09-22 11:29:00 · 858 阅读 · 0 评论 -
SQL Server 日期格式转换
select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),-,), ,),:,)20040912110608select CONVERT(varchar(12) , getdate(),原创 2008-09-23 15:14:00 · 597 阅读 · 0 评论 -
SQL Server 行列转换
/*标题:普通行列转换(version 2.0)作者:范中磊说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94想变成(得到如下结果)原创 2008-09-23 15:39:00 · 6026 阅读 · 5 评论 -
通过身份证获得户籍
--通过身份证获得户籍create function f_getcityfromcid (@cid varchar(18)) returns varchar(50) as begin declare @acity varchar(1000) set @acity = ____,____,____,____,____,____,____,____,____,原创 2008-09-25 13:45:00 · 542 阅读 · 0 评论 -
精妙SQL语句
精妙SQL语句 明:复制表(只复制结构,源表名:a 新表名:b) SQL: select * into b from a where 1 1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) SQL: insert into b(a, b, c) select d,e,f from b; 说明:显示文章、提交人和最后回复时间 SQL: select a.title,a.username,b.ad原创 2008-09-25 14:09:00 · 675 阅读 · 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*/--创建表并插原创 2008-09-25 12:21:00 · 573 阅读 · 0 评论 -
按时间间隔查询统计
[code=SQL]create table tb(时间 datetime , 金额 int)insert into tb values('2007-1-1 10:00:23' , 8 )insert into tb values('2007-1-1 10:01:24' , 4 )insert into tb values('2007-1-1 10:05:转载 2012-06-11 13:09:15 · 2173 阅读 · 0 评论