SQL Sever 学习系列之一

    SQL Sever 学习系列之一 

    本学习系列,从实际工作需要中积累,对于一个新手而言,写出几条漂亮的查询语句,应该是可以受启发的。

     一、问题的需求是:员工薪酬发放,现有资金能发放多少人,哪些人应得?

     /*所有的记录,从头开始累加,直到累加值大于一个给定值以后,返回之前计入累加的记录*/

     先建立相关职工薪酬表,添加测试数据:

create table Table_1
(
  id int identity not null primary key,
  name char(10),
  je decimal(8,2),
  date datetime
)
 
insert  into Table_1 values('张三',200,GETDATE())
insert  into Table_1 values('李四',100,GETDATE())
insert  into Table_1 values('王五',270,GETDATE())
insert  into Table_1 values('张小三',400,GETDATE())
insert  into Table_1 values('李四往',180,GETDATE())
insert  into Table_1 values('王小五',910,GETDATE())
 
select * from Table_1
View Code

    结果如下:

     注:列(je)为员工应得薪酬,先假定老板只有现金400元,看看能发多少人,哪些人可以领取?

     解决方案如下:

declare @i int,@sum1 decimal(8,2),@sum2 decimal(8,2)
set @i=1
set @sum2=400
set @sum1=0
while @i<(select max(id) from Table_1)
 begin
  set @sum1=@sum1+(select je from Table_1 where id=@i)
  if @sum2<@sum1 
  begin
    break
  end
  set @i=@i+1
 end
select * from Table_1 where id<@i
View Code

     结果如下:

    此方法比较简单,还可以用储存过程实现。(读者可以试试)

    二、sql server 2005中如何查询一个数据库中有多少张表?

    --查询当前数据库下所有用户建立的表

SELECT name
,xtype
,status
,crdate
,userstat
,sysstat
,refdate
,version
FROM sysobjects WHERE  xtype = 'U'  
View Code
   其中:
       xtype char(2) 对象类型。可以是下列对象类型中的一种: 
       C = CHECK 约束 
       D = 默认值或 DEFAULT 约束 
       F = FOREIGN KEY 约束 
       L = 日志 
       FN = 标量函数 
       IF = 内嵌表函数 
       P = 存储过程 
       PK = PRIMARY KEY 约束(类型是 K) 
       RF = 复制筛选存储过程 
       S  = 系统表 
      TF = 表函数 
      TR = 触发器 
       U = 用户表 
      UQ = UNIQUE 约束(类型是 K) 
      V = 视图 
      X = 扩展存储过程

 
View Code

    结果如图:

     三、(1)查找一个数据库或表中所含的字段

     代码如下:

 --zjm表的字段名称
select name
,xtype
,typestat
,length
,status
,type
,usertype from   syscolumns   where   id=object_id( 'zjm')

--zjm表的字段数
select   count(name) 表的字段数  from   syscolumns   where   id=object_id( 'zjm') 
View Code

     结果如下:

      (2)在一个库中寻找一个字段归属的数据表

select b.name '表名称' 
,a.xtype
,a.typestat
,a.xusertype
,a.language
,a.length
,b.crdate
from syscolumns a 
inner join sysobjects b  on a.id=b.id and b.xtype='U' and a.name='name'
View Code

     结果如下:

posted @ 2013-11-20 10:40  天堂的鸽子  阅读(593)  评论(0编辑  收藏  举报