1、在SQLServer数据库表中设置主键时,有两种常用的主键数据类型:
int(或bigint)+标识列(又称自动增长字段);
uniqueidentifier(又称Guid、UUID);

其中Guid算法是一种可以产生唯一标识的高效的算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远
不会重复,无论是同一个计算机上还是不同的计算机。SQLServer中生成GUID的函数newid(),.Net中生成GUID的方法:Guid.NewGuid(),返回是Guid
类型。

两者优缺点比较:
Int自增字段的优点:占用空间小、无需开发人员干预、易读;
Guid的优点:效率高、数据导入导出方便;
Int自增字段的缺点:效率低、数据导入导出的时候很痛苦;
Guid的缺点:占用空间大、不易读;
业界主流倾向于使用Guid;

2、数据库中对数据的操作

(1)、在sql语句中出现了中文时要注意在其前面加一个N 以防出错,形如:update Person1 set NickName=N'青年人';
(2)、在向表中插入数据时有两种形式:
不写表中的字段名,形如:insert into Person values(1,'张三',20);
该方式添加的值的顺序得与表中字段顺序一致;
写表中的字段名,形如:insert into Person(Number,Name,Age) values(1,'张三',20);
在实际应用中最好用第二种方式,能使别人一目了然。

(3)、删除数据两种方法:
delete from table:删除表中数据;
drop table:连同表一同删除;

(4)、检索表中数据时可以检索不与任何表示关联的数据,形如:select 1+1 as 列1,getdate() as 日期,newid() as 编号;

(5)、在C#中null表示没有,而在SqlServer中null不表示没有,而表示不知道。
例如:
select null+1;
返回值是null;
select ''+'123';
返回值是123;
select null+'123'
返回值还是null;
由上可知,null在SqlServer中表示不知道。

在数据库中查询字段为null的数据时使用is,形如:select * from Person where Name is null;

(6)、限制结果集范围:
将T_Employee表中数据按工资进行降序排序并取前三,sql语句如下:
select top 3 * from T_Employee order by FSalary DESC;
检索按照工资从高到低排序检索从第六名开始一共三个人的信息,sql语句如下:
select top 3 * from T_Employee where FNumber not in( select top 5 FNumber from T_Employee
order by FSalary DESC) order by FSalary DESC;

(7)、联合结果集:
每个结果集必须有相同的列数;
每个结果集的列必须类型相容.
Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用UNION ALL.
查询每位正式员工的工号和工资,并在最后一行加上所有员工工资额合计,sql语句如下:
select FName,FSalary from T_Employee
UNION
select '工资合计',sum(FSalary) from T_Employee;

(8)、字符串函数:
ceiling:舍入到最大整数,形如:3.33将舍入到4;(ceiling--天花板的意思,所以取最上)
floor():舍入到最小整数,形如:3.33将舍入到3;(floor--地板的意思,所以取最下)
LTRIM():去掉字符串左侧的空格;
RTRIM():去掉字符串右侧的空格;
要想去掉两侧的空格,sql语句如下:
select LTRIM(RTRIM( 'ab' ));
DATEADD(datepart,number,date):计算增加以后的日期.参数date为待计算的日期;参数number
为增量;参数datepart为计量单位.
形如:DATEADD(day,3,getdate());计算三天后的日期.
DATEDIFF(datepart,startdate,enddate):计算两个日期之间的差额.datepart为计量单位,可取值参考DateAdd.
计算员工的工龄,sql语句如下:
select FName,FInDate,DateDiff(year,FInputDate,getdate()) from T_Employee;
DATEPART(datepart,date):返回一个日期的特定部分.
得到每一年入职的员工的人数,sql语句如下:
select DatePart(year,FInDate),count(*) from T_Employee group by DatePart(year,FInDate);


(9)、类型转换函数:
cast(expression as data_type):第一参数是被转换的表达式,第二个参数是数据类型;
select cast('123' as int)
convert(data_type,expression):第一个参数是数据类型,第二参数是被转换的表达式;
select convert(datetime,'2008-09-09')

(10)、空值处理函数:

ISNULL(expression,value):如果expression不为空则返回expression,否则返回value.

例如:
如果从数据库表中检索出所有名字,有一项为空,若想让为空的显示为'佚名',sql语句如下:
select ISNULL(FName,'佚名') as 姓名 from T_Employee;

(10)、CASE函数:

单值判断,相当于switch ccase,用法:CASE expression when value1 then returnvalue1 when value2 then returnvalue2

else defaultreturnvalue end
例如:
从数据库表中检索会员信息,sql语句如下:
select FName,
(
case FLevel
when 1 then '普通客户'
when 2 then '会员'
when 3 then '超级会员'
else '未知客户类型'
end
) as 客户类型
from T_Customer;
测试数据在备注中,相当于if...else...else...,用法:CASE when condation1 then returnvalue1 when condation2 then returnvalue2
else defaultreturnvalue end
例如:
检索雇员的工资水平:
select FName,
(
case
when FSalary<2000 then '低收入'
when FSalary>=2000 and FSalary<=5000 then '中等收入'
else '高收入'
end
) as 收入水平
from T_Employee;

posted on 2013-05-19 22:58  伊人撩月  阅读(219)  评论(0编辑  收藏  举报