#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, я выполняю asEXEC 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