SELECT Y.姓名 ,Y.工号 ,Y.职位 ,Y.部门 ,K.夜班 ,K.日期 ,K.当天上班时间
FROM[T_员工信息] AS Y CROSS JOIN [T_考勤] AS K /*这里我用的是交叉连接*/
WHERE Y.工号 =K.工号 AND K.日期=@RIQI
RETURN
END
GO
SELECT*
FROM[F_D_DAKAJILU]('2014/02/28')
GO
F5:

二:CURSOR,当要检索复杂的数据的每条数据的时候就可以用到它,类似于c语言的指针一样,他可以在你的数据表中阅历每条数据和更新。 1.新写个cursor阅历数据表(T_员工信息)的数据过程: 1.1.声明一个只读cursor:
USE SQL_SYSTEM
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION CURSOR_READ_T_员工信息
DECLARE CUR_T_员工信息 SCROLL CURSOR FOR
SELECT Y.姓名 ,Y.工号 ,Y.职位 ,Y.部门 FROM[T_员工信息]AS Y ORDER BY Y.工号 ASC
COMMIT TRANSACTION CURSOR_READ_T_员工信息
GO1.2.打开:
OPEN GLOBAL CUR_T_员工信息
GO1.3.阅历每条数据:
/*声明4个变量用来接收暂存游标中的数据*/
DECLARE @XINGMING NVARCHAR(3),@GONGHAO INT,@ZHIWEI NVARCHAR(10),@BUMEN NVARCHAR(8)
/*利用全局变量求取当前数据表中的数据行数和*/
PRINT'当前数据表中有'+CAST(@@CURSOR_ROWS AS NVARCHAR(6))+'行数据。'
/*读取第一条数据并存入暂存变量中*/
FETCH FIRST FROM[CUR_T_员工信息]INTO @XINGMING,@GONGHAO,@ZHIWEI,@BUMEN
/*利用@@FETCH_STATUS返回的数值来确定cursor在数据表中读取的情况=0为fetch执行成功*/
WHILE(@@FETCH_STATUS =0)
BEGIN
PRINT'姓名:'+@XINGMING+' 工号:'+CONVERT(VARCHAR(3),@GONGHAO)+' 职位:'+@ZHIWEI+' 部门:'+@BUMEN
FETCH NEXT FROM[CUR_T_员工信息] INTO @XINGMING,@GONGHAO,@ZHIWEI,@BUMEN
END
GOF5:

1.4.用完后就关闭和释放:
/*关闭*/
CLOSE GLOBAL CUR_T_员工信息
/*释放内存*/
DEALLOCATE GLOBAL CUR_T_员工信息
GO这样的话就实现了读取每条记录的功能,然后就可以用它来更新相关的数据条(所有的工号值+100):
USE SQL_SYSTEM
/*下面声明和打开update——cursor*/
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION TR_UPDATE_YG
DECLARE CUR_T_YG CURSOR FOR
SELECT YG.姓名 ,YG.工号 ,YG.职位 ,YG.部门 FROM[T_yuangongxinxi]AS YG FOR
UPDATE
OPEN GLOBAL CUR_T_YG
COMMIT TRANSACTION TR_UPDATE_YG










