将Datediff设置为存储过程中的变量

Kie*_*v95 2 sql variables stored-procedures datediff

我试图在假期表中插入一个新的假期,但是我有一个工期列,我想在存储过程中进行计算。我已经使用日期差异来计算日期,但是我想将日期差异声明为变量,然后将变量打印到insert语句的值中。使用下面的语句,我不断收到此错误:在INSERT的SET子句或列列表中多次指定了列名“ StartDate”。一列不能在同一子句中分配多个值。修改该子句以确保一列仅更新一次。如果此语句更新视图或在视图中插入列,则列别名会隐藏代码中的重复项。

CREATE PROCEDURE    spRequestHoliday    @EmployeeID int,
                                    @StartDate date,
                                    @EndDate date,
                                    @Duration int

                /*
                Name: spRequestHoliday
                Description: Inserts a requested holiday into the holidays table
                */
Run Code Online (Sandbox Code Playgroud)

SELECT DATEDIFF(Day,@StartDate,@EndDate) AS DiffDate

BEGIN
    INSERT INTO Holidays(EmployeeID, StartDate, EndDate, Duration,StartDate)
    VALUES(@EmployeeID, @StartDate, @EndDate, 'DiffDate','PE')
END
Run Code Online (Sandbox Code Playgroud)

Jad*_*ade 5

尝试这个

DECLARE @DateDiff AS Int

SELECT @DateDiff = DATEDIFF(Day,@StartDate,@EndDate)

INSERT INTO Holidays(EmployeeID, StartDate, EndDate, Duration, PE) --< columns name for PE
VALUES(@EmployeeID, @StartDate, @EndDate, @DateDiff,'PE')
Run Code Online (Sandbox Code Playgroud)

要么

INSERT INTO Holidays(EmployeeID, StartDate, EndDate, Duration, PE) --< columns name for PE
VALUES(@EmployeeID, @StartDate, @EndDate, DATEDIFF(Day,@StartDate,@EndDate),'PE')
Run Code Online (Sandbox Code Playgroud)