Microsoft SQL — хранимая процедура для переноса сотрудника

#sql #sql-server #stored-procedures

#sql #sql-сервер #хранимые процедуры

Вопрос:

Я хочу создать хранимую процедуру, которая переводит сотрудника из текущей команды в другую команду. До сих пор я делал это:

 CREATE OR ALTER PROC pr_EmployeeTeam @IDTeam1 int, @IDTeam2 int
AS
BEGIN
    DECLARE @NIC int
    SELECT @IDTeam1 = IDTeam from StuffTeams
    SELECT @IDTeam2 = IDTeam from StuffTeams

    UPDATE StuffTeams SET IDTeam = @IDTeam1 WHERE NIC = @NIC
    UPDATE StuffTeams SET IDTeam = @IDTeam2 WHERE NIC = @NIC 
END

EXEC pr_EmployeeTeam 2,5
 

И моя StuffTeam таблица:

 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),
)
 

StuffTeams Внутри у меня есть 30 значений, но когда я выполняю код, он говорит

Затронуто 0 строк

Большое спасибо

Обновить

 CREATE PROC sp_UpdateTeam
    @TeamID int,
    @NIC int
AS
BEGIN
    update StuffTeams SET IDTeam = @TeamID
    WHERE NIC = @NIC
END

EXEC sp_UpdateTeam 5,54321
 

Это решило мою проблему! Спасибо

Комментарии:

1. Вы никогда не присваиваете @NIC значение и NULL не сопоставляете строки.

2. И вы перезаписываете входные параметры @IDTeam1 @IDTeam2 с некоторым непредсказуемым значением (которое, вероятно, будет одинаковым для обеих переменных)

3. Итак, sp должен получать @IDTeam1 , @IDTeam2 а также @NIC ? Когда я снова добавляю @NIC в sp, я выполняю as EXEC sp_EmployeeTeam 2,5,12345 . На этот раз затронуто 6 строк

4. Вы переопределяете входные параметры, присваиваете одинаковое значение обеим переменным, дважды обновляете таблицу с одним и тем же значением… в целом этот код не имеет особого смысла. Пожалуйста, предоставьте примерные данные и ожидаемый результат (сколько обновленных строк и т. Д.) — В противном случае поддержка здесь невозможна.

5. Представьте, что у меня есть IDTeam = 1 зеленая команда IDTeam = 2 , а какая команда желтая. Я хочу получить NIC номер сотрудника, который похож на идентификационный номер для них, и перейти с зеленой команды на желтую команду.

Ответ №1:

Based upon your requirement, I have updated your proc as shown below:

 CREATE OR ALTER PROC pr_EmployeeTeam @IDTeam1 int, @IDTeam2 int  
AS
BEGIN
DECLARE @NIC int
SELECT @NIC = IDTeam from StuffTeams WHERE IDTeam = @IDTeam1    
UPDATE StuffTeams SET IDTeam = @IDTeam2 WHERE NIC = @NIC

END
 

EXEC pr_EmployeeTeam 2.5