-
SQLSERVER的排序问题结果不是想要的
在论坛里经常有人问这样的问题:同一个查询的结果集为什麽有时候是按他想要的顺序排列,有时候又不是,或者是在SQL2000里是这个顺序,到了SQL2005/2008又是那个顺序?其实,只要语句里没有指定“orderby”,SQLSERVER并不会按照顺序返回的。有可能你的表里有一个字段已经建立了索引你想结果集按照那个建立了索引的字段排序,那么你不指定“orderby”是没有问题的,因为表的存储顺序就是按照那个字段的顺序排好序了,所以可以不指定“orderby”,但是如果你没有在想排序的那个字段建立索引,或者在SQL2000里建立了索引,而在SQL2005/2008里没有建立索引,那么就要明确地用“orderby”指定...
数据库操作教程 2022-09-23 17:07:22 -
SQLServer利用bcp命令把SQL语句结果生成文本文件
在SQLServer里可以调用DOS下的命令行工具bcp来实现把表里的数据或者SQL语句结果生成文本文件。BCP命令的参数格式:复制代码代码如下:BCP{dbtable|query}{in|out|queryout|format}datafile[-mmaxerrors] [-fformatfile] [-eerrfile][-Ffirstrow] [-Llastrow] [-bbatchsize][-nnativetype] [-ccharactertype] [-wwidecharactertype][-Nkeepnon-textnative][-Vfileformatversion][-qquotedidentifier][-Ccodepagespecifier] [-tfieldterminator] [-rrowterminator][-iinputfile] [-ooutfile] [-apacketsize][-Sservername] [-Uusername] [-Ppasswor...
数据库操作教程 2022-09-23 17:06:43 -
SQLServerCONVERT函数测试结果
复制代码代码如下:SELECTCONVERT(varchar(100),GETDATE(),0):0516200610:57AMSELECTCONVERT(varchar(100),GETDATE(),1):05/16/06SELECTCONVERT(varchar(100),GETDATE(),2):06.05...
数据库操作教程 2022-09-23 16:58:39 -
SQLSERVER语句的执行时间显示的统计结果是什么意思
在SQL语句调优的时候,大部分都会查看语句执行时间,究竟SQLSERVER显示出来的统计结果是什么意思?下面看一下例子比较简单的语句:复制代码代码如下:1SETSTATISTICSTIMEON2USE[pratice]3GO4SELECT*FROM[dbo].[Orders]结果:复制代码代码如下:SQLServer分析和编译时间:CPU时间=0毫秒,占用时间=0毫秒。SQLServer执行时间:CPU时间=0毫秒,占用时间=0毫秒...
数据库操作教程 2022-09-23 16:57:24 -
union组合结果集时的order问题
近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理。但程序员对于代码的完美性要求总是不能放弃的,所以,常常会有如鲠在喉的感觉,不搞明白心里会不舒服...
数据库操作教程 2022-09-23 16:56:30 -
sql查询结果合并unionall用法_数据库技巧
复制代码代码如下:--合并重复行select*fromAunionselect*fromB--不合并重复行select*fromAunionallselect*fromB按某个字段排序--合并重复行select*from(select*fromAunionselect*fromB)ASTorderby字段名--不合并重复行select*from(select*fromAunionallselect*fromB)ASTorderby字段名//sqlserver版Select*From(selecttop2id,adddate...
数据库操作教程 2022-09-23 16:54:35 -
根据多条件查询临时表想得到不同结果集的方法
当我写下如下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 -
SQL处理多级分类,查询结果呈树形结构
这样处理的弊端是:如果数据量大,子分类很多,达到4级以上,这方法处理极端占用数据库连接池对性能影响很大。如果用SQL下面的CTE递归处理的话,一次性就能把结果给查询出来,而且性能很不错比用程序处理(数据量很大的情况),临时表性能更好,更方便复制代码代码如下:withareaas(select*,idpx,cast(idasnvarchar(4000))px2fromregionwhereparentid=0unionallselecta.*,b.px,b.px2+ltrim(a.region_id)fromregionajoinareabona.parentid=b.id)select*fromareaorderbypx,px2可以查询出结果—-所有分类及相应分类下子分类idtitleparentid1广东省02广州13白云区24深圳15湖南省06长沙57株洲5复制代码代码如下:withareaas(select*fromregionwhereparentid=1unionallselecta.*fromregionajoinareabona.parentid=b.id)select*...
数据库操作教程 2022-09-23 16:48:24 -
sql查询记录数结果集某个区间内记录
以查询前20到30条为例,主键名为id方法一:先正查,再反查selecttop10*from(selecttop30*fromtablenameorderbyidasc)Aorderbyiddesc方法二:使用leftjoinselecttop10A.*fromtablenameAleftouterjoin(selecttop20*fromtablenameorderbyidasc)BonA...
数据库操作教程 2022-09-23 16:48:10 -
SQL排除重复结果只取字段最大值分享
如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条)。复制代码代码如下:select*from[Sheet1$]awhere IDnotexists(select1from[Sheet1$]wherePID=a.PIDandID>a.ID)selecta.*from[Sheet1$]ainnerjoin(selectPID,max(ID)asmax_idfrom[Sheet1$]groupbyPID)bona.PID=b.PIDanda.ID=b.max_id...
数据库操作教程 2022-09-23 16:46:43 -
SQLServer中将查询结果转换为Json格式脚本分享
脚本源码:复制代码代码如下:SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATEPROCEDURE[dbo].[SerializeJSON](@ParameterSQLASVARCHAR(MAX))ASBEGIN DECLARE@SQLNVARCHAR(MAX)DECLARE@XMLStringVARCHAR(MAX)DECLARE@XMLXMLDECLARE@ParamlistNVARCHAR(1000)SET@Paramlist=N'@XMLXMLOUTPUT'SET@SQL='WITHPrepareTable(XMLString)'SET@SQL=@SQL+'AS('SET@SQL=@SQL+@ParameterSQL+'FORXMLRAW,TYPE,ELEMENTS'SET@SQL=@SQL+')'SET@SQL=@SQL+'SELECT@XML=[XMLString]FROM[PrepareTable]'EXECsp_executesql@SQL,@Paramlist,@XML=@XMLOUTPUTSET@XML...
数据库操作教程 2022-09-23 16:45:25 -
SQLServer中查询结果超出了查询时间范围解决方法
废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇到的一个问题,个人设计了一个例子。USEAdventureWorks2014;GOSELECT*FROM[Person].[Person]WHEREModifiedDate>='2008-11-2600:00:00:000'ANDModifiedDate<='2008-11-2623:59:59.999' 其实如果细看过文档的话,应该知道是什么原因,因为数据类型Datetiem的时间范围:00:00:00到23:59:59.997,最后部分的范围为0~997,官方文档提示,datetime的秒的小数部分精度的有舍入,具体请见下面datetime秒的小数部分精度的舍入如下表所示,将datetime值舍入到.000、.003、或.007秒的增量...
数据库操作教程 2022-09-23 16:42:20