注册 登录
编程论坛 SQL Server论坛

3道笔试的题,来做一下

fengshituo 发布于 2008-03-17 20:48, 1642 次点击
1.已知两个日期2005-10-29和2005-11-01要求生成两个日期之间的所有日期,生成结果如下:
2005-10-29
2005-10-30
2005-10-31
2005-11-01
2.在某大型医院中,由于业务量很大,必须启用了20台客户机为患者挂号。在为每个人挂号时,必须为每次挂号生成唯一的挂号ID,请问:你将在SQLSever中如何设计实现挂号ID的生成(ID需要返回客户机)
3.A表
 定义      代码         类型
发送者     SenderID     INT
邮件标题   MailTile     CHAR(100)
接受者     ReceiveID    INT
其中       SenderID ReceiveID 为表B的外键,表B如下
定义      代码           类型
代码     ID              INT
姓名      Name           CHAR(50)
请用一巨SQL查询出每个邮件的发送者姓名、邮件标题、接受者姓名。
6 回复
#2
iamme812008-03-18 21:42
题1
declare @starttime datetime
declare @endtime datetime
select @starttime='2005/10/29'
select @endtime='2005/11/01'
while(@starttime<=@endtime)
begin
 print convert(char(10),@starttime,120)
 select @starttime=@starttime+1
end
#3
iamme812008-03-18 21:49
题2
使用唯一标识UNIQUEIDENTIFIER标识
create table guaihao(ID UNIQUEIDENTIFIER,date datetime)
每次挂号都将插入一条记录
#4
purana2008-03-18 21:55
1.已知两个日期2005-10-29和2005-11-01要求生成两个日期之间的所有日期,生成结果如下:
2005-10-29
2005-10-30
2005-10-31
2005-11-01

两个解决方案.
2000
先成成一个临时表.
select top 365 dy=identity(int,1,1) into # from syscolumns a,syscolumns b
再加
select dateadd(day,dy,'2005-10-29') date
from # where dateadd(day,dy,'2005-10-29')<='2005-11-01'

2005可以使用CTE
with tmpCTE as
(
  select convert(datetime,'2005-10-29') as date
  union all
  select dateadd(day,1,date)
  from tmpCTE
  where dateadd(day,1,date)<='2005-11-01'
)
select * from tmpCTE

2.在某大型医院中,由于业务量很大,必须启用了20台客户机为患者挂号。在为每个人挂号时,必须为每次挂号生成唯一的挂号ID,请问:你将在SQLSever中如何设计实现挂号ID的生成(ID需要返回客户机)
...这个..可以添加一个挂号表..然后使用事务的方式新增.

3.A表
定义      代码         类型
发送者     SenderID     INT
邮件标题   MailTile     CHAR(100)
接受者     ReceiveID    INT
其中       SenderID ReceiveID 为表B的外键,表B如下
定义      代码           类型
代码     ID              INT
姓名      Name           CHAR(50)
请用一巨SQL查询出每个邮件的发送者姓名、邮件标题、接受者姓名。

select a.name,b.mailtitle,c.name
from 表A b
 left join 表B a
 on b.senderID=a.ID
 left join 表B c
 on b.receiveID=c.id
#5
iamme812008-03-18 22:10
题3

create table AA
(SenderID INT,
MailTile     CHAR(100),
ReceiveID    INT
)

create table BB
(ID              INT,
Name           CHAR(50)
)

select send.Name,send.MailTile,BB.Name from
(select BB.Name as Name,AA.MailTile as MailTile,AA.ReceiveID as ReceiveID from AA,BB
 where AA.SenderID=BB.ID) as send,BB
where send.ReceiveID=BB.ID
#6
lff6422008-04-29 12:26
---1.
declare @tb table (dt datetime)
declare @bgntime datetime
declare @endtime datetime
set @bgntime='2005-10-29'
set @endtime='2005-11-29'

while @bgntime<=@endtime
begin
   insert @tb select @bgntime
   set @bgntime = dateadd(day,1,@bgntime)
end

select * from @tb
#7
zhanghy10282008-04-29 15:26
好复杂
1