您的位置:首页 > 数据库

利用"SQL"语句自动生成序号的两种方式

2014-07-24 15:20 323 查看
1.首先,我们来介绍第一种方式:

◆查询的SQL语句如下:

selectrow_number()over(orderbyname)asrowid,sysobjects.[name]fromsysobjects

◆运行的结果:

rowidname

1all_columns

2all_objects

3all_parameters

4all_sql_modules

5all_views

2.最后,我们来介绍第二种方式:

在我们利用这种方式生成自动序号时,Test_Table必须在数据库中不能存在,因为在执行这些SQL语句的时后自动会创建表。

selectid=IDENTITY(int,1,1),sysobjects.[name]asnameintodbo.Test_Tablefromsysobjects

详细讲解有关获取当月天数的实用技巧

[align=center][/align]

获取当月天数的实用技巧:

以下是引用片段:

selectday(dateadd(mm,1,getdate())-day(getdate()))

--获得当月天数

分析如下:

selectgetdate()--当前日期


selectday(getdate())--目前第几天


selectgetdate()-day(getdate())--上个月最后一天


selectdateadd(mm,1,getdate())-day(getdate())--加上一个月


selectday(dateadd(mm,1,getdate())-day(getdate()))--获得当月天数

  

以下是引用片段:

<scriptlanguage="VBScript">

Dimdt1,dt2

dt1=Date

dt1=CDate(Year(dt1)&"-"&Month(dt1)&"-1")'得到本月第一天

dt2=DateAdd("m",1,dt1)'得到上个月第一天

MsgBoxDateDiff("d",dt1,dt2)'得到两个月的差

</script>

以下是引用片段:

<scriptlanguage="jscript">

vardt=newDate();//得到当前时间

dt=newDate(dt.getFullYear(),dt.getMonth()+1,0);//得到本月最后一天

alert(dt.getDate());//本月最后一天即为本月的天数

</script>

取一表前N条记录各个数据库的不同SQL写法

从别处看到的,本人在用的是DB2,竟然都不一样……看来是不能说“会SQL,所有的数据库用起来都一样”了。

1.ORACLE
SELECT*FROMTABLE1WHEREROWNUM<=N
2.INFORMIX
SELECTFIRSTN*FROMTABLE1
3.DB2

5
SELECT*ROW_NUMBER()OVER(ORDERBYCOL1DESC)ASROWNUMWHEREROWNUM<=N
DB2
SELECTCOLUMNFROMTABLEFETCHFIRSTNROWSONLY
4.SQLSERVER
SELECTTOPN*FROMTABLE1
5.SYBASE
SELECTTOPN*FROMTABLE1
6.mysql:
select*fromtable_namelimitN

为什么SQL不许在视图定义ORDERBY子句

发布时间:2007.08.0305:01来源:赛迪网作者:luoyingshu

问:为什么SQLServer不允许在视图定义使用ORDERBY子句?

答:SQLServer之所以不允许在视图定义中使用ORDERBY子句是为了遵守ANSISQL-92标准。因为对该标准的原理分析需要对结构化查询语言(SQL)的底层结构和它所基于的数学理论进行讨论,我们不能在这里对它进行充分的解释。但是,如果你需要在视图中指定ORDERBY子句,可以考虑使用以下方法:

USEpubs

GO


CREATEVIEWAuthorsByName

AS

SELECTTOP100PERCENT*

FROMauthors

ORDERBYau_lname,au_fname

GO

Microsoft在SQLServer7.0中引入的TOP结构在同ORDERBY子句结合使用时是非常有用的。只有在同TOP关键词结合使用时,SQLServer才支持在视图中使用ORDERBY子句。

注意:TOP关键词是SQLServer对ANSISQL-92标准的扩展。

一条SQL语句变得巨慢的原因及其解决方法

发布时间:2008.01.3004:58来源:赛迪网作者:赵震

现象:一条SQL突然运行的特别慢。

selectuidTable.column_value,first_name||''

||last_name,company,job_title,upper(member_level),

upper(service_value)

from(select*fromtable(selectcast(multiset

(selectbfrombbb)asTaaa)fromdual))uidTable,member

whereuidTable.column_value=member.login_id(+)

andmember.site='alibaba'andmember.site='test';

出错原因:用户增加了一个条件member.site=test,造成连接的顺序变化了,原来的驱动表是uidTable(最多1024条记录),现在变成了member表做驱动(600W条)。所以这条语句变的巨慢。

但是既然是外连接,为什么连接的顺序会改变呢?因为外连接的连接顺序不是由COST决定的,而是由连接的条件决定的。发现执行计划如下:

-------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

--------------------------------------------------------

|0|SELECTSTATEMENT||1018|72278|8155|

|1|NESTEDLOOPS||1018|72278|8155|

|2|VIEW||4072|69224|11|

|3|COLLECTIONITERATORSUBQUERYFETCH|||||

|4|TABLEACCESSFULL|DUAL|4072||11|

|5|TABLEACCESSFULL|BBB|41|287|2|

|6|TABLEACCESSBYINDEXROWID|MEMBER|1|54|2|

|*7|INDEXUNIQUESCAN|MEMBER_SITE_LID_PK|4||1|

-------------------------------------------------

为什么根本就没有执行外连接呢?问题出在member.site='test'这个条件上,因为对外连接的表加了条件,造成外连接失效。改为member.site(+)='test'后,问题彻底解决。

---------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

-----------------------------------------------------

|0|SELECTSTATEMENT||1018|72278|8155|

|1|NESTEDLOOPS||1018|72278|8155|

|2|VIEW||4072|69224|11|

|3|COLLECTIONITERATORSUBQUERYFETCH|||||

|4|TABLEACCESSFULL|DUAL|4072||11|

|5|TABLEACCESSFULL|BBB|41|287|2|

|6|TABLEACCESSBYINDEXROWID|MEMBER|1|54|2|

|*7|INDEXUNIQUESCAN|MEMBER_SITE_LID_PK|4||1|

-----------------------------------------------------------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: