SQL语句积累(一)

081219练习set rowcount,set nocount no

  1. --设置返回的行数
  2. set rowcount 2
  3. select * from Ttest
  4. --设置是否返回影响的行数
  5. set nocount no
  6. select * from Ttest
  7. set nocount off

081218练习一下

  1. use lyds#db
    declare @lstr nvarchar(50)
    declare @rstr nvarchar(50)
    declare @str nvarchar(50)
    declare @iint int
    set @lstr='       ltrim  '
    set @rstr=' rtrim        '
    set @str='12345     '
    set @iint=len(@str)
    update t_Goods set summary='summary'
    + '左' + ltrim(@lstr)
    + '右' + rtrim(@rstr)
    + '截取' + left(@str,3)
    + 'end'
     where gid=2
  2. print @iint
    --select * from t_Goods

081216

判断表或存储过程是否存在

  1. select * from sysobjects where name='表名'
  2. select * from sysobjects where name='存储过程名'

初始化表

truncate table ttest 

1.左连接,右连接。

2.set nocount on 和set nocount off

默认情况下,存储过程将返回过程中每个语句影响的行数。如果不需要在应用程序中使用该信息(大多数应用程序并不需要),请在存储过程中使用 SET NOCOUNT ON 语句以终止该行为。根据存储过程中包含的影响行的语句的数量,这将删除客户端和服务器之间的一个或多个往返过程。尽管这不是大问题,但它可以为高流量应用程序的性能产生负面影响

当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。 当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。

在你统计大量的数据的数量,而又不需要详细的查看每一条记录的时候可以用OFF

 

3.@@identity中包含语句生成的最后一个标识值。

http://www.cnblogs.com/czh-liyu/archive/2007/12/22/1010169.html

 

4.

  1. @@Error
  2.     select @CurrentError = @@Error
  3.     IF @CurrentError != 0
  4.         BEGIN
  5.             GOTO ERROR_HANDLER
  6.         END

5.

  1. use lyds#db
  2. declare 
  3. @start datetime,
  4. @end datetime
  5. set
  6. @start='2008 11 24'
  7. set
  8. @end='2008 11 26'
  9. select distinct sid,sdate from t_Storein where sdate between @start and @end
  10. --似乎distinct只能对应一列,多了就失效。

6.关于distinct的变通方法。

  1. use lyds#db
  2. declare 
  3. @start datetime,
  4. @end datetime
  5. set
  6. @start='2008 11 24'
  7. set
  8. @end='2008 11 26'
  9. select sid,max(sdate) from t_Storein where sdate between @start and @end group by sid
  10. --似乎distinct只能对应一列,多了就失效。
  11. --高手的方法,就是用max再group by
  12. --select distinct sid,convert(varchar(10),sdate,120) from t_Storein where sdate between 
  13. @start and @end
  14. StringBuilder sb = new StringBuilder();
  15. sb.Append("insert into t_StoreIn select * from t_StoreIn_Temp;");
  16. sb.Append("delete  from t_StoreIn_Temp");

7.这种等值连接,没有直观概念,只能理解到这里,即其中一个表的关键值是连接条件,就不会有问题。

select b.*,a.gname 物品名称 from t_StoreIn b,t_Goods a where b.gid=a.gid

081202

  1. declare @cname
  2. select @cname=cname from test_cursor where cid=1
  3. 注释方法
  4. --===============================
  5. -- 发放指定职员的工资
  6. --作者:张树强
  7. --===============================
  8. /***********************************************
  9.    作者:XXX
  10.    日期:  
  11.  ***********************************************/
  12. create procedure sf_当月工资发放 @职员编号 char(10)
  13. as
  14. begin transaction
  15.  update 月工资统计表 set 发放否='是' from 月工资统计表 
  16.   where 职员编号=@职员编号
  17.  insert into 工资发放历史表
  18.   select * from 月工资统计表 
  19.   where 职员编号=@职员编号
  20.  delete 月工资统计表 where 职员编号=@职员编号
  21. commit
  22. GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值