
Sql Server
云烟,不再年轻
积累是一个漫长的过程,它足以可以让你写出N本书的内容
展开
-
实现横向聚合(转邹建的贴子)
看了邹建blog中的这篇文章,感觉很实用问题描述:有表tb,数据如下A1 A2 A3 A4 A5 1 2 5 3 42 2 3 4 50 3 4 2 5 如何输出A1 A2 A3 A4 A5 最大 最小 5以上个数1 2 5 3 4 5 1 12 2 3 4 5 5 2原创 2006-09-09 12:34:00 · 1361 阅读 · 0 评论 -
简单易懂的行转列例子
create table t(tableid nchar(30))insert tselect T1 union allselect T2 union allselect T3 union allselect T4 union allselect T5 union allselect T6 gocreate function f_he()returns @t tabl原创 2006-09-28 21:33:00 · 1435 阅读 · 0 评论 -
全面学习视图
A:分类: 视图分为标准SQL视图 动态视图 INFORMATION_SCHEMA视图 索引视图 分区视图 B:注意点: 一:视图的使用 使用一个新的执行计划比简单地重用一个视图的执行计划效果要好 原因:当使用查询中另外的表来引用一个SQLServer视图时SQL将会重新编译一切内容, 然后再创建一个新的最优的执行计原创 2006-09-28 21:17:00 · 2452 阅读 · 0 评论 -
一个值得研究的系统存储过程 sp_MSforeachtable
它的应用:---------------------------------------------------------------------sp_MSforeachtable @command1=Delete from ?这样可以删除所有表中的数据 也可以这样写sp_MSforeachtable @command1 = "TRUNCATE TABLE ?" ----原创 2006-10-09 20:44:00 · 1797 阅读 · 0 评论 -
如何复制数据库结构
--用脚本就可以了 sql200企业管理器 --右键要复制的数据库 --所有任务 --生成SQL脚本 --里选择"生成全部对象脚本"","在脚本文件中包含说明性标题"选上 --里,将"包含扩展属性",选上 --中,将"表脚本选项原创 2006-10-09 21:18:00 · 1991 阅读 · 0 评论 -
判断临时表是否存在的新方法
IF OBJECT_ID(tempdb..#) IS NOT NULL DROP TABLE #此句检查是否存在 临时表#OBJECT_ID此函数返回数据库对象标识号用OBJECT_ID可以举一反三实现别的功能如:if exists (select * from sysobjects where objectproperty(object_id(PerPer原创 2006-10-09 22:48:00 · 2349 阅读 · 0 评论 -
几种查找和删除重复记录的方法
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只原创 2006-10-10 22:28:00 · 1322 阅读 · 0 评论 -
如何屏蔽触发器和恢复触发器
禁用: ALTER TABLE trig_example DISABLE TRIGGER trig1 GO 恢复: ALTER TABLE trig_example ENABLE TRIGGER trig1 GO --------------------------------------------------------------- --禁用某个表上的所原创 2006-10-09 21:00:00 · 3730 阅读 · 0 评论 -
临时表和表变量的重复创建问题
create table #TemTable(ids int) alter table #TemTable add a int 修改表结构insert into #TemTable --这句插入的时候会出现问题 select 1,1 这样会出错,以前一直不理解,现在知道了,不管是临时表,还是实体表,还是变量表在修改表结构以后,如果不重新编译一次的就直接使用话就会出原创 2006-10-14 22:46:00 · 1316 阅读 · 0 评论 -
如何跨服务器查询
如果查询另一服务器的数库表应该怎么写呢?例:select *from OPENDATASOURCE(SQLOLEDB,Data Source=192.168.0.1;User ID=sa;Password=小).[qumeierptest].dbo.[AssistOrderProduct] a原创 2006-10-16 20:21:00 · 1290 阅读 · 0 评论 -
表变量与临时表的优缺点
<!--google_ad_client = "pub-0523096416305353";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as_rimg";google_cpa_choice = "CAAQ2ZCgnAIaCDqGYK5X_4o_KJnA93M";google原创 2006-10-14 21:50:00 · 1165 阅读 · 0 评论 -
关于不同sql语句执行效率的问题
set @a=Na 和 select @a=Na 哪种赋值效率高呢在单个赋值的情况下,它们的速度是一样的但是多个赋值的情况下,用select 赋值速度更快 ---------------------------------------------------------------------------------------取前几条数据时set ROWCOUNT 2原创 2006-10-20 23:12:00 · 1560 阅读 · 0 评论 -
如何查出一个表已更改的行
BINARY_CHECKSUM 此函数返回一个根据表达式遍及表的所以行的二进制检查数,此函数检查某个表是否被改变了。binary_checksum(*)可以用来检查修改过的行。 同一行在update后,该行的binary_checksum(*)就不同。语法:BINARY_CHECKSUM ( * | expression [ ,...n ] )说明:l 代表的所有列原创 2006-10-20 23:15:00 · 1155 阅读 · 0 评论 -
转一个经典问题,似乎在一些情况下可以代替循环
表table结构如下,有多条记录, beginnum 与endnum的值分别代表起始和终止值,我现在想把此表中所有记录的beginnum 与endnum中间的值分别插入到一个表中,有什么性能高的方法么?我用游标遍历table,然后再用while开insert into,速度超慢..求性能高的方法,谢谢大家beginnum endnum112345 113345248175 2原创 2006-10-20 23:21:00 · 1154 阅读 · 0 评论 -
SQLServer和Oracle常用函数对比
procedure Pro_SubPro ( dw_in in varchar2, cur out pkg_general.ROW_CURSOR ) as begin open cur for select yqmc from fle80 where dwbm=dw_in; end Pro_SubPro; procedure Pro_MainPro( dw_in i原创 2006-10-26 22:36:00 · 1259 阅读 · 0 评论 -
一些sql 技巧及知识的汇总
把长日期转换为短日期 Convert(char(10),getdate(),120) MS-SQL数据库开发常用汇总 1.按姓氏笔画排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密:select encrypt(原始密码)select pwdencrypt原创 2006-10-26 22:33:00 · 1570 阅读 · 0 评论 -
两个小问题where 1=1 和 count(1) 与 count(*)
where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样。select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1b,其目的就只有一个,where的条件为永真,得到的结果就是未加约束条件的。在SQL注入时会用到这个,例如select * from table1 where name=原创 2006-11-06 23:15:00 · 2179 阅读 · 0 评论 -
特殊的交叉表
问:有一个表有几个字段如下jgid capitalnumber tr_type9452 351101314351 tru9452 351101314352 stru9452 351101314353 tru9452 351101314354 tru9452 351101314356 stru9452 351101314358 tru想成生这样的表jgid cap原创 2006-11-06 21:28:00 · 1375 阅读 · 0 评论 -
列转行
问:表结构如下time ne RegUser OpenUserCount Sysrate2006-10-13 15:00WHMSC141.61288254 2569152006-10-13 15:00WHMSC236.12255287 2264572006-10-13 15:00WHMSC324.34191782 16996原创 2006-11-07 22:52:00 · 1339 阅读 · 0 评论 -
分级求和
A B20061105 1020061106 1220061107 1320061108 1420061109 15表是这样的格式算出每个日期之前的所有的B的值,所得结果如下 A B20061105 1020原创 2006-11-14 22:28:00 · 1271 阅读 · 0 评论 -
如何将Select查询结果保存到EXCEL中
(1)创建EXCEL文件c:/temp.xls(2)执行查询insert into OPENROWSET(Microsoft.Jet.OLEDB.4.0,Excel 5.0;HDR=YES;DATABASE=c:/temp.xls,sheet1$)select * from tablename 同样在sql server中查询excel的记录select * from OPENR原创 2006-11-29 22:07:00 · 7463 阅读 · 1 评论 -
创建链接服务器实行跨服务器查询
--创建链接服务器exec sp_addlinkedserver srv_lnk,,SQLOLEDB,远程服务器名或ip地址exec sp_addlinkedsrvlogin srv_lnk,false,null,用户名,密码go--查询示例select * from srv_lnk.数据库名.dbo.表名--插入示例insert srv_lnk.数据库名.d原创 2006-11-29 22:22:00 · 1400 阅读 · 0 评论 -
恢复误删数据(SQL Server 2000)--Log Explorer (转贴)
不小心把客户那边的数据库中删了一千多条数据,而且之前又没有备份,真的是很郁闷,后来在网上找到一工具,用起来挺方便,让我躲过一劫。 首先来看一下界面: 输入服务器地址,用户名及密码后点Connect,进入到下面的界面:在这里选择要恢复数据的数据库,选择Use On-line Log(如果你又备份文件的话就不需要用这个工具了,直接用SQL搞定了)。然后点Attach,进入下面的界面原创 2006-11-26 11:32:00 · 1613 阅读 · 0 评论 -
动态交叉表
/*-- 数据测试环境 --*/if exists (select * from dbo.sysobjects where id = object_id(N[tb]) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table [tb]GOcreate table tb(单位名称 varchar(10),日期 datetime,销售额 int原创 2006-12-04 22:24:00 · 1481 阅读 · 0 评论 -
SQL Server 2005 处理交叉表
日期 时间 售货金额2006-01-02 早上 502006-01-02 中午 202006-01-02 晚上 302006-01-02 零晨 402006-01-03 早上 402006-01-03 中午 602006-01-03 晚上 5020原创 2006-12-05 20:31:00 · 1191 阅读 · 0 评论 -
比较字符串是否相等
表的一个字段varchar类型,select * from a where f1=@var(传入参数)f1比如为"AA,BGF,YH",@var为"BGF,YH,AA".也就是说相同的值,只是排列顺序不同.怎么写个简单函数来判断相等?当然可以SUBSTRING()一个一个取来判断,显得比较麻烦.--创建用户定义函数create function f_StrCmp(@strA varc原创 2006-12-05 20:34:00 · 3172 阅读 · 0 评论 -
SQL Server 2005 列转行
怎么把一条记录拆分成几条记录?User No. A B C1 1 21 34 241 2 42 25 16RESULT:User No. Type原创 2006-12-05 20:44:00 · 2277 阅读 · 0 评论 -
合并列值(包含sql2000及sql2005方法)
----------------------------------------------------------------------sql2000有表tb, 如下:id value----- ------1 aa1 bb2 aaa2 bbb2 ccc需要得到结果:id values------ -----------1原创 2006-12-05 20:48:00 · 1572 阅读 · 0 评论 -
分拆列值(包含sql2000及sql2005方法)
有表tb, 如下:id values----------- -----------1 aa,bb2 aaa,bbb,ccc欲按,分拆values列, 分拆后结果如下:id value----------- --------1 aa1 bb2 aaa2原创 2006-12-05 20:53:00 · 1282 阅读 · 1 评论 -
grouping分级汇总用法
declare @t table(DeptNo varchar(20),WorkNo int,salary int)insert @t select 电子部, 123, 2300union all select 电子部, 124, 2500union all select 广告部, 125, 1200union all select 广告部, 126,原创 2006-12-05 21:14:00 · 1139 阅读 · 0 评论 -
动态SQL对各列进行求和运算
如下表: id F1 F2 F3 F4 F5 F6...... 1 a b 12 25 10 20 2 a b 20 5 10 21 3 c d 12 123 1 21我想达到如下效果将F1,F2相同记录进行合并后只保留一条(列出所有字段),并对F3进行SU原创 2006-12-05 21:24:00 · 5482 阅读 · 0 评论 -
对视图有时为什么使用select top 100 percent * 而不使用 select * 呢?
在视图里面如果要对视图进行排序那么规定必须使用select top ..... from ... order by ....如果要对整个视图排序,自然是select top 100 percent from ...... order by ......原创 2006-12-05 22:01:00 · 10984 阅读 · 1 评论 -
LOG日志特别大,怎样"瘦身"
压缩日志及数据库文件大小/*--特别注意请按步骤进行,未进行前面的步骤,请不要做后面的步骤否则可能损坏你的数据库.一般不建议做第4,6两步第4步不安全,有可能损坏数据库或丢失数据第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.--*/--下面的所有库名都指你要处理的数据库的库名1.清空日志DUMP TRANSACTION 库名 WITH NO_L原创 2006-12-05 22:14:00 · 2636 阅读 · 0 评论 -
为什么使用sq_executesql而不用execute组装动态语句
sp_executesql 有个优点,就是不用像excute一样有变量的时候,连接字符串写的很麻烦,而且容易出错,而且使用sp_executesql这个批处理只在第一次被组装,后续执行都可以使用同样的字符串,而且提供另外一组参数下面写一个sp_executesql中带多个参数的例子,很简单exec sp_executesql @sql=Nselect * from cdu where j原创 2006-12-07 23:00:00 · 1762 阅读 · 0 评论 -
利用SQL Server 2000进行硬盘文件的移动
if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[p_movefile]) and OBJECTPROPERTY(id, NIsProcedure) = 1) drop procedure [dbo].[p_movefile] GO /*--移动服务器上的文件 不借助 xp_cmds原创 2006-12-09 16:39:00 · 1256 阅读 · 0 评论 -
分页存储过程
CREATE proc P_SoBiGo_PercentPage (@tblName varchar(255)=T_Category, -- 表名 @strGetFields varchar(1000)=*, -- 需要返回的列 @fldName varchar(255)=, -- 排序的字段名原创 2006-12-09 16:54:00 · 1306 阅读 · 0 评论 -
行列转换/矩阵转换
行列转换/矩阵转换一、行列转换。1、纵转换为横。有表:test(name char(10),km char(10),cj int)name km cj----------------------------------------------张三 语文 80张三 数学 86张三 英语 75李四 语文 78李四 数学 85李四 英语 78要求以横向格式显示,即原创 2006-12-11 22:32:00 · 6259 阅读 · 0 评论 -
系统存储过程sp_depends
这个存储过程专门用来查看一个数据库对象引用了哪些其它的数据库对象比如要看一个存储过程用到了哪些表及字段,就可以写:exec sp_depends sp_procedure如果是表名要加引号exec sp_depends MyTable同样可以检查触发器这个存储过程对于检查一个存储过程是很方便的,我们使用它就可以看到存储过程使用了哪些表及字段,而不用写存储过程的脚本,去一原创 2006-12-12 22:31:00 · 6670 阅读 · 0 评论 -
patindex与charindex
一直以来看sql 联机帮助没看出 patindex与charindex有什么很大的区别,觉得patindex(%chicken%,complaints)与charindex(chicken,complaints)的效果是一样的,但是patindex(%chicken,complaints)这样就不同了,这是匹配以chicken开头的字段,反之patindex(chicke原创 2006-12-17 12:05:00 · 1319 阅读 · 0 评论 -
sql server中扩展存储过程大全
--获得MS SQL的版本号 execute master..sp_msgetversion --得到硬盘文件信息 --参数说明:目录名,目录深度,是否显示文件 execute master..xp_dirtree c: execute master..xp_dirtree c:,1 execute master..xp_dirtree c:,1,1 --列出服务器上安装的所有原创 2006-12-18 22:25:00 · 1685 阅读 · 0 评论