【问题标题】:Stored Procedures Unaffected rows存储过程不受影响的行
【发布时间】:2017-09-22 19:33:23
【问题描述】:

我试图通过一些代码来生成工资单的工资单,但我有未受影响的行,在我测试脚本时没有提示任何信息。 我的参数允许 'startdate'、'endnote'、'taxID' 和两个 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

【问题讨论】:

标签: sql sql-server database tsql ssms


【解决方案1】:

在本节中,@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2010-11-15
    相关资源
    最近更新 更多