<<SQL Server 2005 高级程序设计>> 学习笔记(4)
2010-04-13 16:12
561 查看
1、定义变量与赋值
Declare @UserID --定义变量
Select @UserID=1 --赋值
Set @UserID=1
Select @UserID=UserID from tb_User where UserName='A' --这样也是可以赋值的, 记得刚学SQL2000不知道这样是可以
如下: 则通过变量,把值返回, 不需要另外创建表
Declare @UserID int, @UserName varchar(20)
Set @UserID=1
Set @UserName='AAA'
Select @UserID as UserID, @UserName as UserName
2、几个系统函数的使用
@@error一般使用过事务的人就熟使用这个系统函数。 在@error<>0时, 事务回滚。
@@RowCount影响的行数
@@Identity返回插入行主键的值
3、cast convert的用法
Convert: 时间的转化时用得最多, 例如:Convert(varchar(10), getdate(),111)
Cast: 例如: cast(* as *), 当在改变表结构时, cast when then else end这样的语句会起最大的作用
例:
/*
表UserDetails有字段
UserID, Code, Type
2 C-1 Coo
2 M-1 Coo
2 D-1 Doo
3 C-1 Coo
3 M-1 Coo
3 H-1 Doo
需要把字段变成 UserID, Code不同的值(有多少个就是多少个),值为Type, 如果是没有的则留为空
UserID C-1 M-1 D-1 H-1
2 Coo Coo Coo
3 Coo Coo Doo
*/
declare @sql varchar(500)
--首先需要选UserID
set @sql='select Userid '
/*
下面句尤其重要, 原理如下
既然要把code的不同值当标题, 首先要从表里把code不同的值选出来 select distinct code from UserDetails 用集合temp来表示
然后通过cast来把Type的值赋到值里面, 通过UserID来汇总
case when then else end这样的语法就在这里起好大的作用了
*/
select @sql= @sql + ', max(case code when ''' + code +''' then Type else '''' end) as ''' + code+''''
from (select distinct code from UserDetails) as Temp
set @sql= @sql +' from UserDetails group by Userid'
exec(@sql)
还有一种cast是搜索型的, 也就是case后不表达式, 在when后面根有条件表达式:
select UserID, InsertTime, [type] = case when(datediff(day,InsertTime,getdate())>0) then 'Old' else 'New' end from UserDetails
小结: 现在多数的笔数都有一条这改变表结构的, 或许他们觉得能做出来才是SQL精通者, 然而我刚好认为这不, 因为好多人做不出来, 也不代表人家不精通, 因为这只是SQL中cast的一个函数, 范围太小了, 再加上是笔试, 好多人没有真正的去调试过, 感觉现在能用纸与笔用做程序的人少了.
Declare @UserID --定义变量
Select @UserID=1 --赋值
Set @UserID=1
Select @UserID=UserID from tb_User where UserName='A' --这样也是可以赋值的, 记得刚学SQL2000不知道这样是可以
如下: 则通过变量,把值返回, 不需要另外创建表
Declare @UserID int, @UserName varchar(20)
Set @UserID=1
Set @UserName='AAA'
Select @UserID as UserID, @UserName as UserName
2、几个系统函数的使用
@@error一般使用过事务的人就熟使用这个系统函数。 在@error<>0时, 事务回滚。
@@RowCount影响的行数
@@Identity返回插入行主键的值
3、cast convert的用法
Convert: 时间的转化时用得最多, 例如:Convert(varchar(10), getdate(),111)
Cast: 例如: cast(* as *), 当在改变表结构时, cast when then else end这样的语句会起最大的作用
例:
/*
表UserDetails有字段
UserID, Code, Type
2 C-1 Coo
2 M-1 Coo
2 D-1 Doo
3 C-1 Coo
3 M-1 Coo
3 H-1 Doo
需要把字段变成 UserID, Code不同的值(有多少个就是多少个),值为Type, 如果是没有的则留为空
UserID C-1 M-1 D-1 H-1
2 Coo Coo Coo
3 Coo Coo Doo
*/
declare @sql varchar(500)
--首先需要选UserID
set @sql='select Userid '
/*
下面句尤其重要, 原理如下
既然要把code的不同值当标题, 首先要从表里把code不同的值选出来 select distinct code from UserDetails 用集合temp来表示
然后通过cast来把Type的值赋到值里面, 通过UserID来汇总
case when then else end这样的语法就在这里起好大的作用了
*/
select @sql= @sql + ', max(case code when ''' + code +''' then Type else '''' end) as ''' + code+''''
from (select distinct code from UserDetails) as Temp
set @sql= @sql +' from UserDetails group by Userid'
exec(@sql)
还有一种cast是搜索型的, 也就是case后不表达式, 在when后面根有条件表达式:
select UserID, InsertTime, [type] = case when(datediff(day,InsertTime,getdate())>0) then 'Old' else 'New' end from UserDetails
小结: 现在多数的笔数都有一条这改变表结构的, 或许他们觉得能做出来才是SQL精通者, 然而我刚好认为这不, 因为好多人做不出来, 也不代表人家不精通, 因为这只是SQL中cast的一个函数, 范围太小了, 再加上是笔试, 好多人没有真正的去调试过, 感觉现在能用纸与笔用做程序的人少了.
相关文章推荐
- <<SQL Server 2005 高级程序设计>> 学习笔记(5)
- <<SQL Server 2005 高级程序设计>> 学习笔记(3)
- <<SQL Server 2005 高级程序设计>> 学习笔记(2)
- <<SQL Server 2005 高级程序设计>> 学习笔记(1)
- <Python高级全栈开发工程师-1>学习过程笔记【181-184】正则表达式 <特殊字符><函数>
- 事件流之事件冒泡与事件捕获<JavaScript高级程序设计>学习笔记
- <<UNIX环境高级编程>>学习笔记之环境搭建
- <第二章>Node 学习笔记 |>简单的模块<|
- <第一章>Node 学习笔记 |>Mac Node安装<|
- <<高级Bash脚本编程>> 学习笔记
- <javascript高级程序设计>笔记
- Html学习笔记 --- html中<ul>与<ol>区别
- <<Stochastic Discrete Event Systems >>学习笔记
- <<Python基础教程>>学习笔记 | 第09章 | 魔法方法、属性和迭代器
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.5 保护
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.6 中断和异常处理
- <<Python基础教程>>学习笔记 | 第04章 | 字典
- SQL Server 重建索引|索引重组|索引的碎片检查 (MSSQL个人笔记之数据库优化之路 六<SQL2005以上>)
- <第四章>Node 学习笔记 |> QueryString 参数处理小利器<|
- 学习笔记之HTML中<ul>与<ol>的区别