--相关年月的税率请自己去设置:参考信息如下
--相关资料也可在http://download.csdn.net/detail/cnjack/3581426下载
/*
我国自1981年开征个人所得税以后,个税起征点在长达20多年的时间里一直维持在800元,曾经在2005年和2007年分两次调高了个税起征点。
2005年10月27日,十届全国人大常委会第十八次会议于下午高票表决通过关于修改个人所得税法的决定,修改后的个人所得税法自2006年1月1日起施行。此次个人所得税法,在两处进行了修改。其中第六条第一款第一项修改:"工资、薪金所得,以每个月收入额减除费用1600元后的余额,为应纳税所得额。"同时,对"个人所得税税率表一"的附注作相应修改。
2007年12月29日,十届全国人大常委会第三十一次会议表决通过了关于修改个人所得税法的决定。个人所得税起征点自2008年3月1日起由1600元提高到2000元。这次修改,适应了居民基本生活消费支出增长的新情况,减轻了中低收入者的纳税负担。
但两次上调起征点造成了"中低收入者税负减的少,高收入税负减的多"的尴尬局面,若提至3000元,按照既有税率计算月薪为5000元的纳税人税负只能减少100元,而10.3万元减少400元,个税调整应注意解决这个问题。因此,个税改革方案,要有效地解决中低收入群体对税收改革的要求,还兼顾政府对税收的需要,并使高收入群体的纳税负担有据可依。税收操作要简单易行,降低税收成本;要改变一个有缺陷的税率即九级税率。个税改革要把握公平,公平的原则是:在起征点上,寻找一个公平、讲理的税率,让收入低的少纳税而不是不纳税,让收入高的多纳税但也要有个以理服人的依据,不是想怎么收税就怎么收税,而是对谁都公平。为此,建议你读一读刘朝阳委员的《突破个税改革思维误区》和《提高个税起征点绝路逢生,建立自然累进税率使个税改革柳暗花明》,是在国际上都先进的思维。
*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TaxRateTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[TaxRateTable] GO CREATE TABLE [dbo].[TaxRateTable] ( [tax_year] [int] NOT NULL , [tax_month] [int] NOT NULL , [tax_salary] [int] NOT NULL , [tax_lower] [int] NOT NULL , [tax_upper] [int] NOT NULL , [tax_rate] [int] NOT NULL , [tax_deduct] [int] NOT NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[TaxRateTable] WITH NOCHECK ADD CONSTRAINT [PK_TaxRateTable] PRIMARY KEY CLUSTERED ( [tax_year], [tax_month], [tax_rate] ) ON [PRIMARY] GO exec sp_addextendedproperty N'MS_Description', N'个人所得税税率表', N'user', N'dbo', N'table', N'TaxRateTable' GO exec sp_addextendedproperty N'MS_Description', N'扣除數', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_deduct' GO exec sp_addextendedproperty N'MS_Description', N'范圍(低)', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_lower' GO exec sp_addextendedproperty N'MS_Description', N'月', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_month' GO exec sp_addextendedproperty N'MS_Description', N'稅率(%)', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_rate' GO exec sp_addextendedproperty N'MS_Description', N'起稅金額', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_salary' GO exec sp_addextendedproperty N'MS_Description', N'范圍(高)', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_upper' GO exec sp_addextendedproperty N'MS_Description', N'年', N'user', N'dbo', N'table', N'TaxRateTable', N'column', N'tax_year' GO insert into TaxRateTable select * from openrowset('SQLOLEDB','192.168.100.6';'sa';'',data_test.dbo.TaxRateTable) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fun_Return_Tax]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[fun_Return_Tax] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE FUNCTION fun_Return_Tax(@Year nvarchar(4),@Month nvarchar(2),@Salary decimal(18,4)) RETURNS decimal(18,4) AS begin declare @TaxRate decimal(18,4),@minMonths int,@currentMonths int --1.返回當前計算年月以後的最小年月的總月數 select @minMonths=min(tax_year*12+tax_Month) from taxRateTable where tax_year*12+tax_Month>@Year*12+@Month --2.返回當前計算年月對應的總月數 if isnull(@minMonths,0)>0 select @currentMonths=max(tax_year*12+tax_Month) from TaxRateTable where tax_year*12+tax_Month<@minMonths else select @currentMonths=max(tax_year*12+tax_Month) from TaxRateTable --3.獲得當前年月應收金額對應的稅款 if isnull(@currentMonths,0)=0 begin --返回錯誤信息:沒有適合當前年月的稅率表 declare @msg nvarchar(200) set @msg='沒有適合當前<'+@Year+'年'+@Month+'月>的稅率表,返回稅款為應得工資.' -- raiserror(@msg,16,1) return @Salary end else begin -- select * from TaxRateTable where tax_year*12+tax_Month=@currentMonths and (@Salary-Tax_Salary>Tax_Lower and @Salary-Tax_Salary<=Tax_Upper) select @TaxRate=(@Salary-Tax_Salary)*(Tax_Rate/100.0)-Tax_Deduct from TaxRateTable where tax_year*12+tax_Month=@currentMonths and (@Salary-Tax_Salary>Tax_Lower and @Salary-Tax_Salary<=Tax_Upper) end return isnull(@TaxRate,0) end GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
--调用方法:fun_Return_Tax(2011,5,3600)