1. case .... when ...then 用法

select top 10 contact_id,
'contactStatus'=      ----------可以不加引号,只是为区别下班的而加,可以用其他任何名字,它是该列的列名
case when contact_status=90 then 'a'
when contact_status=92 then 'b'
else 'c'
end
from contact

2.datadiff( datepart , startdate , enddate ) 求时间差

datapart 可以使year,month,day

3.if else 和case when 区别个人意见

if else

用在这种情况下
create proc #test
as
begin
declare @i int
create table #tb_test(id int primary key)
insert into #tb_test select distinct contact_id from contact where is_noncriminal=1
select @i=count(id) from #tb_test  注意这里,不能写成set  @i= select count(id) from #tb_test ,这是错误的
 if @i>10 -------if else一般用在这样情况,不能写在select语句里面
begin
print 'a'
end
else
print 'b'
end
go

exec #test

------注意 set  @i= ‘select count(id) from #tb_test’ 必须是这样然后,用exec @i 就可以的到其值,这是两种方法 

 4. set nocount   当on时,不返回计数(表示受T-sql语句影响的行数),当为off时,返回计数

5. @@ROWCOUNT

  • 将 @@ROWCOUNT 设置为受影响或被读取的行的数目。可以将行发送到客户端,也可以不发送。
  • 保留前一个语句执行中的 @@ROWCOUNT。
  • 将 @@ROWCOUNT 重置为 0 但不将该值返回到客户端。

    记住,end 只和begin相配对

    6。@@IDENTITY返回插入到表的 IDENTITY 列的最后一个值。这个用返回值很有用

    7.游标的使用

    整个存储过程

    alter proc #test
    as
    DECLARE report_cursor CURSOR FOR
    select top 5 contact_id ,contact_name,display_name  from contact
    OPEN report_cursor
    FETCH NEXT  FROM report_cursor---注意它可以一条record 全部得到(包括多列),但是使用时,一定要释放,否则很危险
    CLOSE report_cursor
    DEALLOCATE report_cursor
    go

    i,声明一个游标DECLARE report_cursor CURSOR FOR

    ii,打开游标OPEN report_cursor

    iii,从游标中取值 FETCH NEXT  FROM report_cursor

    iv,关闭游标 CLOSE  report_cursor

    v,释放游标 DEALLOCATE report_cursor

  • 8。视图

  • 视图的查询定义必须满足3个条件:

  • a. 不能在查询定义中使用ORDER BY,除非定义中包含TOP或FOR XML说明符。

  • b. 所有的结果列必须有名称。

  • c. 所有结果列的名称必须是唯一的。

  • 通常在SELECT中使用*不是一个好习惯,但你可以在EXISTS谓词中放心使用。

  • 9.视图的修改

  • 修改视图时具有下列限制:

    n  只要视图有一列不能隐式获取值,你就不能向视图插入数据。如果列允许NULL、有默认值、设置了IDENTITY属性或类型为ROWVERSION,则说明它可以隐式地获取值。

    n  如果视图由一个联接查询(join query)定义,UPDATE或INSERT语句只能影响联接的一端。也就是说,INSERT语句必须定义目标列列表,这些列只能属于联接的一端。同样,UPDATE语句修改的列也必须都属于联接的一端。但是,你可以在查询的其他地方(如赋值语句的右端、查询筛选器等)引用任何列。你不能从由联接查询定义的视图中删除数据。

    n  不能修改作为计算结果的列。标量表达式和聚合(aggregate)。SQL Server不会尝试改变数据库引擎的计算结果。

    n  如果在创建或修改视图时指定了WITH CHECK OPTION选项,与视图的查询筛选器有冲突的INSERT或UPDTE语句将被拒绝。我将在“视图选项”一节详细描述这一点。

  • 10.如果视图已经存在,使用ALTER VIEW命令比删除后再重建视图要更明智,因为ALTER VIEW可以保持权限。

     


     

  • Posted on 2008-10-24 16:10  sunlibo  阅读(129)  评论(0)    收藏  举报