在存储过程中更新
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从外面看效果
我正在尝试接收 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从外面看效果