【赛迪网- IT 技术报道】 SQL Server2005 数据库中利用 SQL 语句自动生成序号 :
1. 首先,我们来介绍第一种方式 :
◆ 查询的 SQL 语句如下 :
select row_number() over (order by name) as rowid, sysobjects.[name] from sysobjects
◆ 运行的结果 :
rowid name
1 all_columns
2 all_objects
3 all_parameters
4 all_sql_modules
5 all_views
2. 最后,我们来介绍第二种方式 :
在我们利用这种方式生成自动序号时, Test_Table 必须在数据库中不能存在 , 因为在执行这些 SQL 语句的时后自动会创建表。
select id=IDENTITY(int,1,1), sysobjects.[name] as name into dbo.Test_Table from sysobjects
获取当月天数的实用技巧:
以下是引用片段:
select day(dateadd(mm,1,getdate())-day(getdate()))
-- 获得当月天数
分析如下 :
select getdate() -- 当前日期
select day(getdate()) -- 目前第几天
select getdate()-day(getdate()) -- 上个月最后一天
select dateadd(mm,1,getdate())-day(getdate()) -- 加上一个月
select day(dateadd(mm,1,getdate())-day(getdate())) -- 获得当月天数
以下是引用片段:
<script language="VBScript">
Dim dt1, dt2
dt1 = Date
dt1 = CDate(Year(dt1) & "-" & Month(dt1) & "-1") ' 得到本月第一天
dt2 = DateAdd("m", 1, dt1) ' 得到上个月第一天
MsgBox DateDiff("d", dt1, dt2) ' 得到两个月的差
</script>
以下是引用片段:
<script language="jscript">
var dt = new Date(); // 得到当前时间
dt = new Date(dt.getFullYear(), dt.getMonth() + 1, 0); // 得到本月最后一天
alert(dt.getDate()); // 本月最后一天即为本月的天数
</script>
取一表前 N 条记录 各个数据库的不同 SQL 写法
从别处看到的,本人在用的是 DB2 ,竟然都不一样 …… 看来是不能说 “ 会 SQL ,所有的数据库用起来都一样 ” 了。 $r2>;Q?Q &f.;ydLYt 1. ORACLE g -HN M [1] SELECT * FROM TABLE1 WHERE ROWNUM<=N m16!oAV?s 2. INFORMIX c tP'/79] SELECT FIRST N * FROM TABLE1 > /zA]/^X 3. DB2 4R!W-B
5
SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=
N
bQaDIry'u
DB2
lU)6}Q' SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY .+f)f?W‑6 4. SQL SERVER X.LTZfA{ SELECT TOP N * FROM TABLE1 02btp&T4B 5. SYBASE $d,_g ~ SELECT TOP N * FROM TABLE1 7SqsVbLk
6. mysql: Rb(_27T!vW select * from table_name limit N l;&!z; dLg#,ZGd
发布时间: 2007.08.03 05:01 来源:赛迪网 作者: luoyingshu
问: 为什么 SQL Server 不允许在视图定义使用 ORDER BY 子句?
答: SQL Server 之所以不允许在视图定义中使用 ORDER BY 子句是为了遵守 ANSI SQL-92 标准。因为对该标准的原理分析需要对结构化查询语言( SQL )的底层结构和它所基于的数学理论进行讨论,我们不能在这里对它进行充分的解释。但是,如果你需要在视图中指定 ORDER BY 子句,可以考虑使用以下方法:
USE pubs
GO
CREATE VIEW AuthorsByName
AS
SELECT TOP 100 PERCENT *
FROM authors
ORDER BY au_lname, au_fname
GO
Microsoft 在 SQL Server 7.0 中引入的 TOP 结构在同 ORDER BY 子句结合使用时是非常有用的。只有在同 TOP 关键词结合使用时, SQL Server 才支持在视图中使用 ORDER BY 子句。
注意: TOP 关键词是 SQL Server 对 ANSI SQL-92 标准的扩展。
一条 SQL 语句变得巨慢的原因及其解决方法
发布时间: 2008.01.30 04:58 来源:赛迪网 作者:赵震
现象: 一条 SQL 突然运行的特别慢。
select uidTable.column_value, first_name||' '
||last_name, company, job_title, upper(member_level),
upper(service_value)
from (select * from table(select cast(multiset
(select b from bbb)as Taaa) from dual)) uidTable,member
where uidTable.column_value = member.login_id(+)
and member.site='alibaba' and member.site='test';
出错原因: 用户增加了一个条件 member.site=test, 造成连接的顺序变化了,原来的驱动表是 uidTable( 最多 1024 条记录),现在变成了 member 表做驱动 (600W 条)。所以这条语句变的巨慢。
但是既然是外连接,为什么连接的顺序会改变呢?因为外连接的连接顺序不是由 COST 决定的,而是由连接的条件决定的。发现执行计划如下:
-------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------
| 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 |
| 1 | NESTED LOOPS | | 1018 | 72278 | 8155 |
| 2 | VIEW | | 4072 | 69224 | 11 |
| 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | |
| 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 |
| 5 | TABLE ACCESS FULL | BBB | 41 | 287 | 2 |
| 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |
|* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |
-------------------------------------------------
为什么根本就没有执行外连接呢?问题出在 member.site='test' 这个条件上,因为对外连接的表加了条件,造成外连接失效。改为 member.site(+)='test' 后,问题彻底解决。
---------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
-----------------------------------------------------
| 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 |
| 1 | NESTED LOOPS | | 1018 | 72278 | 8155 |
| 2 | VIEW | | 4072 | 69224 | 11 |
| 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | |
| 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 |
| 5 | TABLE ACCESS FULL | BBB | 41 | 287 | 2 |
| 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |
|* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |
-----------------------------------------------------------