在存储过程中更新

Update in stored procedures

我正在尝试接收 NIC 名员工,这是他们的 ID 号,并根据时间段从一个团队切换到另一个团队。

所以,我有 4 个团队负责开发一个软件,每个员工可以在不同的时间段参与不同的团队。例如,我有一名员工 NIC 编号 54323,属于 3 个不同的组。但是当我执行查询时说 1 行受影响但是当我这样做时 select * from StuffTeams where NIC = 54323它没有改变任何东西。

CREATE OR ALTER PROCEDURE sp_TransferTeam
    @NIC int,
    @IDTeam1 int,
    @IDTeam2 int,
    @StartDate date,
    @EndDate date
AS
BEGIN
    SELECT @NIC = NIC 
    FROM StuffTeams 
    WHERE IDTeam = @IDTeam1 

    UPDATE StuffTeams 
    SET IDTeam = @IDTeam2 
    WHERE NIC = @NIC 
      AND DateStart = @StartDate 
      AND DateFinish = @EndDate
END

EXEC sp_TransferTeam 54323, 4, 2, '2017-08-01', '2017-10-01'

StuffTeam table:

CREATE TABLE StuffTeams
(
    IDStuffTeam nvarchar(30) NOT NULL,
    IDTeam int NOT NULL,
    NIC int NOT NULL,
    DateStart date NOT NULL,
    DateFinish date NOT NULL,
    CONSTRAINT PK_Stuff PRIMARY KEY (IDStuffTeam),
    CONSTRAINT FK_sTeam FOREIGN KEY (IDTeam) REFERENCES Teams (IDTeam),
    CONSTRAINT FK_sNIC FOREIGN KEY (NIC) REFERENCES Employees (NIC),
)

无论如何团队table:

CREATE TABLE Teams 
(
    IDTeam int NOT NULL,
    IDProduct int NOT NULL,
    TeamName nvarchar(30) NOT NULL,
    DateStart date NOT NULL,
    DateFinish date NOT NULL,
    CONSTRAINT PK_Team PRIMARY KEY (IDTeam),
    CONSTRAINT FK_IDProduct FOREIGN KEY (IDProduct) REFERENCES Products (IDProduct)
)

非常感谢

您应该将@NIC 声明为变量而不是参数,然后在您的第一个查询中设置它。调试的一个好方法是 select 在您的 SP 之外使用 where 子句的记录,然后查看您定位的所有记录是否都被 select 编辑。

SELECT * FROM StuffTeams
    WHERE NIC = 54323 
      AND DateStart = '2017-08-01' 
      AND DateFinish = '2017-10-01'

试试 运行 这个,看看它是否 returns 记录你想更新。您的 where 子句可能会过滤掉它们。如果不是,请尝试将传递日期的日期格式更改为 MM-DD-YYYY。

按如下方式编辑您的 sp

CREATE OR ALTER PROCEDURE sp_TransferTeam
    @NIC int,
    @IDTeam1 int,
    @IDTeam2 int,
    @StartDate date,
    @EndDate date
AS
BEGIN
    UPDATE StuffTeams 
    SET IDTeam = @IDTeam2 
    WHERE NIC = @NIC 
      AND DateStart = @StartDate 
      AND DateFinish = @EndDate
END

EXEC sp_TransferTeam 54323, 4, 2, '2017-08-01', '2017-10-01'

然后select从外面看效果