SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的。举几个例子来简单说明 这些例子我引用了Northwind库。
1. TOP 表达式
SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了。
–前n名的订单
declare @n int
set @n = 10
select TOP(@n) * from orders
2. 分页
不知各位过去用SQL Server 2000是怎么分页的,大多都用到了临时表。SQL Server 2005一句话就支持分页,性能据说也非常不错。
–按Freight从小到大排序,求20到30行的结果
select * from(select orderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from orders) a
where row between 20 and 30
临时表分页
alter procedure testFenYe
(
@pageSize int=8,
@currentpage int=1,
@whereclause varchar(200),
@orderBy varchar(100)
)
as
create table #tmpTable
(
RowId int identity primary key,
id int,
[name] varchar(50)
)
declare @tmpSql varchar(2000)
set @tmpSql='insert into #tmpTable(id,name)
select id,name from table1'
if @whereclause is not ......
SQL Server 的模拟
专栏作家:Deanna Dicken 2010年2月12日
翻译: UltraDBA 2010年5月25日
原帖地址:http://www.databasejournal.com/features/mssql/article.php/3863516/SQL-Server-Impersonation.htm
介绍
SQL Server 的模拟,或上下文切换,是一种方式,允许当前用户模拟给定用户或登录的权限,直到上
下文重置,设置回另一个用户,或会话结束。接下来,我们将讨论两种实现这项任务的机制并完成一些
实例。
SETUSER
在 SQL Server 2000 中,如果你有需要用到安全上下文切换,你只有一个选择:SETUSER。用给定的用
户名执行语句,临时设置允许提供账户执行的权限。多个调用能够被使用,安全上下文切换通过调用不
带用户名的 SETUSER 语句重置回原来的上下文环境。
许可
与联机帮助相反的是,一个账号想调用 SETUSER 必须拥有 sysadmin 服务器角色。联机帮助错误的描
述用户拥有 dbo 权限也能利用这个语句,然后这是不行的。
示例
下面的例子展示了安全上下文切换从当前登录账号 adminacct,切换到一个 SQL 登录,再到另一个
SQL 登录,然后切换回来。注意,安全上下文是通过执行不带用户名的 SETUSER ......
SQL Default 约束的初步认识和理解!
首先创建一张表hello
CREATE TABLE hello
(
Id_P int PRIMARY KEY,
Firstname varchar(50),
Lastname varchar(50),
Address varchar(50),
City varchar(50)
)
创建约束条件
CREATE DEFAULT beijing_const AS 'beijing'
绑定约束条件到列上
sp_bindefault beijing_const,'hello.Address'
sp_bindefault beijing_const,'hello.City'
插入一条信息
INSERT INTO hello(Id_P,Firstname,Lastname) values(01,'Bush','Green')
最后结果是 ......
详细地步骤:
1、打开MicroSoft Excel 2000
2、文件(F)→新建(N)→工作簿→
3、输入数据后,存盘为test.xls,
4、文件(F)→另存为(A)→
保存类型为:制表符分隔,起名为text.txt,保存到C:\
5、须先创建表结构:
连入SQL*Plus,以system/manager用户登录,
SQL> conn system/manager
创建表结构
SQL> create table test
(
id number, --序号
username varchar2(10), --用户名
password varchar2(10), --密码
sj varchar2(20) --建立日期
);
6、创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑:
控制文件:input. ......
详细地步骤:
1、打开MicroSoft Excel 2000
2、文件(F)→新建(N)→工作簿→
3、输入数据后,存盘为test.xls,
4、文件(F)→另存为(A)→
保存类型为:制表符分隔,起名为text.txt,保存到C:\
5、须先创建表结构:
连入SQL*Plus,以system/manager用户登录,
SQL> conn system/manager
创建表结构
SQL> create table test
(
id number, --序号
username varchar2(10), --用户名
password varchar2(10), --密码
sj varchar2(20) --建立日期
);
6、创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑:
控制文件:input. ......
创建一张表,直接在表列上绑定默认值
CREATE TABLE hello
(
Id_P int PRIMARY KEY,
Firstname varchar(50) DEFAULT 'Bush',
Lastname varchar(50) DEFAULT 'Green',
Address varchar(50) DEFAULT 'China',
City varchar(50) DEFAULT 'beijing'
)
插入一条信息
INSERT INTO hello(Id_P) values(01)
结果是
总结:使用默认值DEFAULT时候是先创建,再绑定。
有两种方法:1、直接在表列上,添加默认值,Firstname varchar(50) DEFAULT 'Bush'。
2、CREATE DEFAULT beijing_const AS 'beijing' 先创建DEFAULT
sp_bindefault beijing_const,'hello.Firstname' 后绑定到相应的列上,删除创建的DEFAULT的方法是
DROP DEFAULT beijing_const。 ......
修改内容:删除原来的TIME维度,新建TIME维度,修改SALES立方。
数据插入:
1,事实数据插入:通过DTS加调度实现将sales_fact_1997的数据进行复制。频率为每分钟10000条。
主要用到的SQL语句:select top 10000 * from sales_fact_1997
2,维度数据插入:通过SQL语句插入数据到time_by_day. 测试用到的SQL语句:
1,单条插入
INSERT INTO time_by_day
(time_id, the_date, the_year, month_of_year, quarter,day_of_month)
VALUES ('1101', '1999-10-1', '1999', '10', 'Q4','1')
2,单条插入:
INSERT INTO time_by_day
(time_id, the_date, the_year, month_of_year, quarter, day_of_mont ......