2017-04-25 42 views
0

我試圖通過一些代碼來生成工資單的工資單,但我有不受影響的行不會提示任何信息,因爲我測試腳本。 我的參數允許使用'startdate','endnote','taxID'和兩個tvp表格,這些表格會花費他們的時間和折扣優惠。payroll tvp存儲過程沒有行受到影響

我怎樣才能讓它通過信息?

IF EXISTS(SELECT * FROM sys.Databases WHERE name='usp_createPayroll') 
BEGIN 
    DROP PROCEDURE dbo.usp_createPayroll 
    DROP TYPE dbo.EmployeeInfo 
    DROP TYPE dbo.AllowanceInfo 
END 

CREATE TYPE EmployeeInfo AS TABLE 
(
    employeeID INT 
    ,TotalHours INT 
    ,PRIMARY KEY (
     employeeID 
     ,TotalHours 
     ) 
); 
GO 

CREATE TYPE AllowanceInfo AS TABLE 
(
    employeeID INT, allowanceID INT, Amount DECIMAL(7, 2),PRIMARY KEY (
     employeeID, allowanceID, Amount 
     ) 
); 
GO 

CREATE PROCEDURE usp_createPayroll @StartDatePeriod DATE ,@EndDatePeriod DATE, @taxID INT, @numberofTotalHours EmployeeInfo READONLY, @Allowance AllowanceInfo READONLY 
AS 
BEGIN 
    INSERT INTO Payslip 
    SELECT h.employeeID, 
      @taxID, @StartDatePeriod, 
      @EndDatePeriod, 
      h.TotalHours, 
      p.hourlyRate * h.TotalHours, 
     (p.hourlyRate * h.TotalHours) + a.Amount, 
     ((p.hourlyRate * h.TotalHours) + a.Amount) * t.taxRate, 
     ((p.hourlyRate * h.TotalHours) + a.Amount) - (((p.hourlyRate * h.TotalHours) + a.Amount) * t.taxRate) 
    FROM @numberofTotalHours h, @Allowance a, Position p, PayAllowance pa, HumanResources e, Taxes t, EmployeePositions ep 
    WHERE (e.employeeID = ep.employeeID AND ep.PositionID = p.PositionID) AND e.employeeID = h.employeeID AND t.taxID = @taxID 
END 

DECLARE @employeeInfo EmployeeInfo; 
DECLARE @TotalHours INT; 

INSERT @employeeInfo 
SELECT e.employeeID, @TotalHours 
FROM HumanResources e 
WHERE e.employeeID = 2 AND @TotalHours = 30 

DECLARE @allowanceInfo AllowanceInfo; 
DECLARE @employeeAllowanceInfo EmployeeInfo; 

INSERT @allowanceInfo 
SELECT e.employeeID, pa.allowanceID, pa.Amount 
FROM HumanResources e, Allowance a, PayAllowance pa, EmployeeAllowance ea, @employeeAllowanceInfo emp 
WHERE e.employeeID = emp.employeeID AND pa.AllowanceID = a.AllowanceID AND a.AllowanceID = ea.AllowanceID AND pa.allowanceID = 1 

EXECUTE usp_createPayroll 
    @startDatePeriod = '01-01-2015 23:59:59' 
    ,@endDatePeriod = '01-31-2015 23:59:59' 
    ,@taxID = 2 
    ,@numberofTotalHours = @employeeInfo 
    ,@Allowance = @allowanceInfo 
GO 

SELECT * 
FROM PaySlip 
+1

[不良習慣踢:使用舊式連接 - 伯特蘭·亞倫(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-使用老的風格,joins.aspx) – SqlZim

回答

0

在本節中,@TotalHoursnull,所以你會從HumanResources得不到行:

declare @employeeInfo EmployeeInfo; 
declare @TotalHours int; 

insert @employeeInfo 
select 
    e.employeeID 
    , @TotalHours 
from HumanResources e 
where e.employeeID = 2 
    and @TotalHours = 30 

在本節中,@employeeAllowanceInfo聲明,但沒有行已經插入,所以where e.employeeID = emp.employeeID意味着沒有行返回。

declare @allowanceInfo AllowanceInfo; 
declare @employeeAllowanceInfo EmployeeInfo; 

insert @allowanceInfo 
select e.employeeID 
, pa.allowanceID 
, pa.Amount 
from HumanResources e 
, Allowance a 
, PayAllowance pa 
, EmployeeAllowance ea 
, @employeeAllowanceInfo emp 
where e.employeeID = emp.employeeID 
    and pa.AllowanceID = a.AllowanceID 
    and a.AllowanceID = ea.AllowanceID 
    and pa.allowanceID = 1 
相關問題