人力资源管理实例程序.sql
上传用户:hjieqiu
上传日期:2013-05-11
资源大小:16494k
文件大小:14k
源码类别:

企业管理

开发平台:

C#

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_工资发放历史表_职员基本信息表]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  2. ALTER TABLE [dbo].[工资发放历史表] DROP CONSTRAINT FK_工资发放历史表_职员基本信息表
  3. GO
  4. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_月工资统计表_职员基本信息表]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  5. ALTER TABLE [dbo].[月工资统计表] DROP CONSTRAINT FK_月工资统计表_职员基本信息表
  6. GO
  7. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_职员惩罚表_职员基本信息表]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  8. ALTER TABLE [dbo].[职员惩罚表] DROP CONSTRAINT FK_职员惩罚表_职员基本信息表
  9. GO
  10. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_职员奖励表_职员基本信息表]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
  11. ALTER TABLE [dbo].[职员奖励表] DROP CONSTRAINT FK_职员奖励表_职员基本信息表
  12. GO
  13. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[用户清单]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  14. drop table [dbo].[用户清单]
  15. GO
  16. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[组织机构编码表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  17. drop table [dbo].[组织机构编码表]
  18. GO
  19. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[职员基本信息表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  20. drop table [dbo].[职员基本信息表]
  21. GO
  22. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[月工资统计表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  23. drop table [dbo].[月工资统计表]
  24. GO
  25. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[个人所得税表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  26. drop table [dbo].[个人所得税表]
  27. GO
  28. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[工资发放历史表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  29. drop table [dbo].[工资发放历史表]
  30. GO
  31. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[职员奖励表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  32. drop table [dbo].[职员奖励表]
  33. GO
  34. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[职员惩罚表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  35. drop table [dbo].[职员惩罚表]
  36. GO
  37. CREATE TABLE [dbo].[用户清单] (
  38. [用户编号] [char] (6) NOT NULL ,
  39. [部门] [char] (20) NOT NULL ,
  40. [姓名] [char] (10) NOT NULL ,
  41. [性别] [char] (2) NOT NULL ,
  42. [密码] [char] (10) NULL 
  43. ) ON [PRIMARY]
  44. GO
  45. CREATE TABLE [dbo].[组织机构编码表] (
  46. [内部编号] [int] IDENTITY (1, 1) NOT NULL ,
  47. [类别] [varchar] (100) NULL ,
  48. [AbsIndex] [int] NULL ,
  49. [ItemIndex] [int] NULL ,
  50. [ItemLevel] [int] NULL ,
  51. [ParentIndex] [int] NULL ,
  52. [类别号] [char] (10) NULL ,
  53. [单位编号] [varchar] (20) NOT NULL PRIMARY KEY,
  54. [单位名称] [varchar] (100) NULL ,
  55. [拼音编码] [varchar] (50) NULL ,
  56. [单位地址] [varchar] (100) NULL ,
  57. [单位电话号码] [varchar] (50) NULL ,
  58. [开户银行] [varchar] (100) NULL ,
  59. [帐号] [varchar] (50) NULL ,
  60. [开户全称] [varchar] (100) NULL
  61. ) ON [PRIMARY]
  62. GO
  63. CREATE TABLE [dbo].[职员基本信息表] (
  64. [内部编号] [int] IDENTITY (1, 1) NOT NULL ,
  65. [职员编号] [varchar] (30) NOT NULL PRIMARY KEY,
  66. [姓名] [varchar] (20) NOT NULL ,
  67. [姓名简码] [varchar] (10) NULL ,
  68. [性别] [varchar] (2) NULL ,
  69. [出生日期] [int] NULL ,
  70. [年龄] [int] NULL ,
  71. [籍贯] [varchar] (50) NULL ,
  72. [民族] [varchar] (20) NULL ,
  73. [文化程度] [char] (50) NULL ,
  74. [毕业学校] [char] (100) NULL ,
  75. [健康状况] [varchar] (50) NULL ,
  76. [婚姻状况] [varchar] (10) NULL ,
  77. [身份证号码] [varchar] (18) NULL ,
  78. [家庭电话] [varchar] (50) NULL ,
  79. [办公电话] [varchar] (50) NULL ,
  80. [手机] [varchar] (50) NULL ,
  81. [电子邮件地址] [varchar] (50) NULL ,
  82. [职工账号] [varchar] (20) NULL ,
  83. [单位编号] [varchar] (20) NULL, 
  84. [备注] [varchar] (100) NULL 
  85. ) ON [PRIMARY]
  86. GO
  87. CREATE TABLE [dbo].[月工资统计表] (
  88. [日期] [int] NULL ,
  89. [职员编号] [varchar] (30) Not NULL PRIMARY KEY,
  90. [基本工资] [float] NULL DEFAULT (0) ,
  91. [浮动工资] [decimal](26, 2) NULL DEFAULT (0) ,
  92. [合同补] [decimal](26, 2) NULL DEFAULT (0) ,
  93. [粮副补] [decimal](26, 2) NULL DEFAULT (0) ,
  94. [房补] [decimal](26, 2) NULL DEFAULT (0) ,
  95. [临时补] [decimal](26, 2) NULL DEFAULT (0) ,
  96. [职务工资] [decimal](26, 2) NULL DEFAULT (0) ,
  97. [工龄工资] [decimal](26, 2) NULL DEFAULT (0) ,
  98. [考核工资] [decimal](26, 2) NULL DEFAULT (0) ,
  99. [奖金] [decimal](26, 2) NULL DEFAULT (0) ,
  100. [应发金额合计] [decimal](26, 2) NULL DEFAULT (0) ,
  101. [房租] [decimal](26, 2) NULL DEFAULT (0) ,
  102. [水电费] [decimal](26, 2) NULL DEFAULT (0) ,
  103. [请假扣除] [decimal](26, 2) NULL DEFAULT (0) ,
  104. [考勤扣除] [decimal](26, 2) NULL DEFAULT (0) ,
  105. [罚款] [decimal](26, 2) NULL DEFAULT (0) ,
  106. [住房公积金] [decimal](26, 2) NULL DEFAULT (0) ,
  107. [医疗保险] [decimal](26, 2) NULL DEFAULT (0) ,
  108. [养老保险] [decimal](26, 2) NULL DEFAULT (0) ,
  109. [失业保险] [decimal](26, 2) NULL DEFAULT (0) ,
  110. [生育保险] [decimal](26, 2) NULL DEFAULT (0) ,
  111. [工伤保险] [decimal](26, 2) NULL DEFAULT (0) ,
  112. [应扣金额合计] [decimal](26, 2) NULL DEFAULT (0) ,
  113. [工资合计] [decimal](26, 2) NULL DEFAULT (0) ,
  114. [个人所得税] [decimal](26, 2) NULL DEFAULT (0) ,
  115. [实发金额] [decimal](26, 2) NULL DEFAULT (0) ,
  116. [发放否] [char] (10) NULL ,
  117. [月份] [int] NULL
  118. ) ON [PRIMARY]
  119. GO
  120. CREATE TABLE [dbo].[个人所得税表] (
  121. [编号] [int] NOT NULL PRIMARY KEY,
  122. [级数] [char] (2) NOT NULL ,
  123. [不计税工资] [decimal](26, 2) NOT NULL DEFAULT (800),
  124. [工资下限] [decimal](26, 2) NOT NULL DEFAULT (0),
  125. [工资上限] [decimal](26, 2) NOT NULL DEFAULT (0),
  126. [个人所得税率] [decimal](26, 2) NOT NULL DEFAULT (0),
  127. [速算扣除数] [decimal](26, 2) NOT NULL DEFAULT (0),
  128. [备注] [varchar] (50) NULL
  129. ) ON [PRIMARY]
  130. GO
  131. CREATE TABLE [dbo].[工资发放历史表] (
  132. [日期] [int] NULL ,
  133. [职员编号] [varchar] (30) NULL ,
  134. [基本工资] [float] NULL ,
  135. [浮动工资] [decimal](26, 2) NULL ,
  136. [合同补] [decimal](26, 2) NULL ,
  137. [粮副补] [decimal](26, 2) NULL ,
  138. [房补] [decimal](26, 2) NULL ,
  139. [临时补] [decimal](26, 2) NULL ,
  140. [职务工资] [decimal](26, 2) NULL ,
  141. [工龄工资] [decimal](26, 2) NULL ,
  142. [考核工资] [decimal](26, 2) NULL ,
  143. [奖金] [decimal](26, 2) NULL ,
  144. [应发金额合计] [decimal](26, 2) NULL ,
  145. [房租] [decimal](26, 2) NULL ,
  146. [水电费] [decimal](26, 2) NULL ,
  147. [请假扣除] [decimal](26, 2) NULL ,
  148. [考勤扣除] [decimal](26, 2) NULL ,
  149. [罚款] [decimal](26, 2) NULL ,
  150. [住房公积金] [decimal](26, 2) NULL ,
  151. [医疗保险] [decimal](26, 2) NULL ,
  152. [养老保险] [decimal](26, 2) NULL ,
  153. [失业保险] [decimal](26, 2) NULL ,
  154. [生育保险] [decimal](26, 2) NULL ,
  155. [工伤保险] [decimal](26, 2) NULL ,
  156. [应扣金额合计] [decimal](26, 2) NULL ,
  157. [工资合计] [decimal](26, 2) NULL ,
  158. [个人所得税] [decimal](26, 2) NULL ,
  159. [实发金额] [decimal](26, 2) NULL ,
  160. [发放否] [char] (10) NULL ,
  161. [月份] [int] NULL
  162. ) ON [PRIMARY]
  163. GO
  164. CREATE TABLE [dbo].[职员奖励表] (
  165. [序号] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY,
  166. [职员编号] [varchar] (30) NOT NULL ,
  167. [奖励类型] [varchar] (20) NULL ,
  168. [奖励金额] [float] NULL DEFAULT (0),
  169. [是否计入工资] [char] (10) NULL DEFAULT ('否'),
  170. [奖励原因] [varchar] (50) NULL ,
  171. [部门意见] [varchar] (100) NULL ,
  172. [奖励日期] [int] NULL
  173. ) ON [PRIMARY]
  174. GO
  175. CREATE TABLE [dbo].[职员惩罚表] (
  176. [序号] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY,
  177. [职员编号] [varchar] (30) NOT NULL ,
  178. [惩罚类型] [varchar] (20) NULL ,
  179. [惩罚金额] [float] NULL DEFAULT (0) ,
  180. [是否计入工资] [char] (10) NULL DEFAULT ('否'),
  181. [惩罚原因] [varchar] (50) NULL ,
  182. [部门意见] [varchar] (100) NULL ,
  183. [惩罚日期] [int] NULL
  184. ) ON [PRIMARY]
  185. GO
  186. -- 外键关联字段
  187. ALTER TABLE [dbo].[月工资统计表] ADD 
  188. CONSTRAINT [FK_月工资统计表_职员基本信息表] FOREIGN KEY 
  189. (
  190. [职员编号]
  191. ) REFERENCES [dbo].[职员基本信息表] (
  192. [职员编号]
  193. )
  194. GO
  195. ALTER TABLE [dbo].[工资发放历史表] ADD 
  196. CONSTRAINT [FK_工资发放历史表_职员基本信息表] FOREIGN KEY 
  197. (
  198. [职员编号]
  199. ) REFERENCES [dbo].[职员基本信息表] (
  200. [职员编号]
  201. )
  202. GO
  203. ALTER TABLE [dbo].[职员奖励表] ADD 
  204. CONSTRAINT [FK_职员奖励表_职员基本信息表] FOREIGN KEY 
  205. (
  206. [职员编号]
  207. ) REFERENCES [dbo].[职员基本信息表] (
  208. [职员编号]
  209. )
  210. GO
  211. ALTER TABLE [dbo].[职员惩罚表] ADD 
  212. CONSTRAINT [FK_职员惩罚表_职员基本信息表] FOREIGN KEY 
  213. (
  214. [职员编号]
  215. ) REFERENCES [dbo].[职员基本信息表] (
  216. [职员编号]
  217. )
  218. GO
  219. -- 存储过程
  220. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sf_空数据置0]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  221. drop procedure [dbo].[sf_空数据置0]
  222. GO
  223. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sf_形成月工资统计表]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  224. drop procedure [dbo].[sf_形成月工资统计表]
  225. GO
  226. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sf_当月工资统计]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  227. drop procedure [dbo].[sf_当月工资统计]
  228. GO
  229. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sf_当月工资发放]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  230. drop procedure [dbo].[sf_当月工资发放]
  231. GO
  232. -----------------------
  233. create procedure sf_空数据置0
  234. as
  235. begin transaction
  236. update 月工资统计表 set 基本工资=0 where 基本工资 is null
  237. update 月工资统计表 set 职务工资=0 where 职务工资 is null
  238. update 月工资统计表 set 工龄工资=0 where 工龄工资 is null
  239. update 月工资统计表 set 考核工资=0 where 考核工资 is null
  240. update 月工资统计表 set 奖金=0 where 奖金 is null
  241. update 月工资统计表 set 应发金额合计=0 where 应发金额合计 is null
  242. update 月工资统计表 set 房租=0 where 房租 is null
  243. update 月工资统计表 set 水电费=0 where 水电费 is null
  244. update 月工资统计表 set 请假扣除=0 where 请假扣除 is null
  245. update 月工资统计表 set 罚款=0 where 罚款 is null
  246. update 月工资统计表 set 考勤扣除=0 where 考勤扣除 is null
  247. update 月工资统计表 set 住房公积金=0 where 住房公积金 is null
  248. update 月工资统计表 set 医疗保险=0 where 医疗保险 is null
  249. update 月工资统计表 set 养老保险=0 where 养老保险 is null
  250. update 月工资统计表 set 应扣金额合计=0 where 应扣金额合计 is null
  251. update 月工资统计表 set 失业保险=0 where 失业保险 is null
  252. update 月工资统计表 set 个人所得税=0 where 个人所得税 is null
  253. update 月工资统计表 set 工资合计=0 where 工资合计 is null
  254. update 月工资统计表 set 实发金额=0 where 实发金额 is null
  255. update 个人所得税表 set 个人所得税率=0 where 个人所得税率 is null
  256. commit
  257. GO
  258. -------------------------------------
  259. create procedure sf_当月工资统计
  260. as
  261. begin transaction
  262. declare @month int
  263. select @month = 日期 from 月工资统计表
  264. -- 计算奖金
  265. update 月工资统计表 set 奖金 = 
  266. (select sum(奖励金额) from 职员奖励表 as i where i.是否计入工资='是' and 
  267. i.奖励日期>@month*100 and i.奖励日期<(@month+1)*100 
  268. group by i.职员编号 having i.职员编号=月工资统计表.职员编号)
  269. update 月工资统计表 set 奖金=0 where 奖金 is null
  270. -- 计算惩罚
  271. update 月工资统计表 set 罚款 = 
  272. (select sum(惩罚金额) from 职员惩罚表 as i where i.是否计入工资='是' and 
  273. i.惩罚日期>@month*100 and i.惩罚日期<(@month+1)*100 
  274. group by i.职员编号 having i.职员编号=月工资统计表.职员编号)
  275. update 月工资统计表 set 罚款=0 where 罚款 is null
  276. -- 将空数据置0
  277. exec sf_空数据置0
  278. -- 计算应发/应扣/工资合计
  279. update 月工资统计表
  280. set 应扣金额合计 = 房租+水电费+请假扣除+罚款+考勤扣除+住房公积金+医疗保险
  281. +养老保险+失业保险
  282. update 月工资统计表
  283. set 应发金额合计=基本工资+浮动工资+合同补+粮副补+房补+临时补
  284. +职务工资+工龄工资+ 考核工资+ 奖金
  285. update 月工资统计表
  286. set 工资合计 = 应发金额合计 - 应扣金额合计
  287. -- 计算个人所得税
  288. declare @gzhj numeric(20,4), @zybh varchar(20), @grsds numeric(20,4),@sl float, 
  289. @gzxx numeric(20,4),@gzsx numeric(20,4)
  290. declare mycur cursor for select 职员编号,工资合计 from 月工资统计表
  291. open mycur
  292. fetch next from mycur into @zybh,@gzhj
  293. WHILE (@@FETCH_STATUS = 0 )
  294. BEGIN
  295. -- 扣除不计税部分
  296. select @gzhj = @gzhj - (select top 1 不计税工资 from 个人所得税表 order by 级数)
  297. select @grsds = 0
  298. declare mycur1 cursor for select 工资下限,工资上限,case when 
  299. 个人所得税率>1 then 个人所得税率/100 else 个人所得税率 end 
  300. from 个人所得税表 where 工资上限 <= @gzhj order by 工资上限  
  301. open mycur1
  302. fetch next from mycur1 into @gzxx, @gzsx,@sl
  303. WHILE (@@FETCH_STATUS = 0 )
  304. BEGIN
  305. select @grsds = @grsds + (@gzsx-@gzxx)*@sl
  306. fetch next from mycur1 into @gzxx, @gzsx,@sl
  307. END
  308. close mycur1
  309. deallocate mycur1
  310. select @sl = case when 个人所得税率>1 then 个人所得税率/100 else 
  311. 个人所得税率 end , @gzxx = 工资下限 from 个人所得税表 
  312. where 工资下限=@gzsx
  313. select @grsds = @grsds + (@gzhj-@gzxx)*@sl
  314. update 月工资统计表 set 个人所得税 = @grsds where current of mycur
  315. fetch next from mycur into @zybh,@gzhj
  316. END
  317. close mycur
  318. deallocate mycur
  319. -- 计算实发工资
  320. update 月工资统计表 set 实发金额 = 工资合计-个人所得税
  321. commit
  322. GO
  323. -------------------------------------
  324. create procedure sf_形成月工资统计表 @导入工资月份 int, @统计工资月份 int
  325. as
  326. begin transaction
  327. delete from 月工资统计表    -- 删除已有数据
  328. if exists (select * from 工资发放历史表 where 日期=@导入工资月份)
  329. begin
  330. -- 从历史倒入
  331. insert into 月工资统计表
  332. (日期, 职员编号, 基本工资, 浮动工资, 合同补, 粮副补, 房补, 临时补, 
  333. 职务工资, 工龄工资, 考核工资, 奖金, 应发金额合计, 房租, 水电费,
  334. 请假扣除, 考勤扣除, 罚款, 住房公积金, 医疗保险, 养老保险, 失业保险, 
  335. 生育保险, 工伤保险, 应扣金额合计, 工资合计, 个人所得税, 实发金额,
  336. 发放否, 月份)
  337. select @统计工资月份, 职员编号, 基本工资, 浮动工资, 合同补, 粮副补, 
  338. 房补, 临时补, 职务工资, 工龄工资, 考核工资, 奖金, 
  339. 应发金额合计, 房租, 水电费, 请假扣除, 考勤扣除, 罚款,
  340. 住房公积金, 医疗保险, 养老保险, 失业保险, 生育保险, 
  341. 工伤保险, 应扣金额合计, 工资合计, 个人所得税, 实发金额,
  342. 发放否, 月份
  343. from 工资发放历史表 as h where h.日期=@导入工资月份 
  344. end
  345. -- 新的员工,历史没有记录,生成记录
  346. insert into 月工资统计表 (职员编号,日期) select 职员编号,@统计工资月份 
  347. from 职员基本信息表 as h where h.职员编号 not in 
  348. (select 职员编号 from  月工资统计表)
  349. -- 将空数据置0
  350. exec sf_空数据置0
  351. -- 自动计算工资
  352. exec sf_当月工资统计
  353. commit
  354. GO
  355. --------------------- 发放指定职员的工资
  356. create procedure sf_当月工资发放 @职员编号 char(10)
  357. as
  358. begin transaction
  359. update 月工资统计表 set 发放否='是' from 月工资统计表 
  360. where 职员编号=@职员编号
  361. insert into 工资发放历史表
  362. select * from 月工资统计表 
  363. where 职员编号=@职员编号
  364. delete 月工资统计表 where 职员编号=@职员编号
  365. commit
  366. GO
  367. --- 初始化数据
  368. insert into 用户清单 values('1','系统管理','sys','M','sys')
  369. insert into 用户清单 values('zs','采购部','张三','M','sys')
  370. insert into 用户清单 values('ls','销售部','李四','M','sys')
  371. insert into 用户清单 values('ww','财务部','王五','M','sys')
  372. go