Справочная информация: у меня есть таблица со списком людей и еще одна таблица событий, которые происходят.Мне нужна дата, когда событие произошло последним для человека, обновленного в столбце для базы данных людей.
Так что я понимаю, что мне нужно создать и запустить хранимую процедуру с агентом SQL Server, который бысделай это для меня.Хотя я никогда не писал хранимую процедуру, поэтому для меня это тоже практика.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Gary Senter
-- Create date: 5/25/2019
-- Description: Returns employee data.
-- =============================================
ALTER PROCEDURE [dbo].[spLocal_Safety_Sync]
@LastName NVARCHAR(50) = NULL,
@FirstName NVARCHAR(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @injury_date DATETIME;
DECLARE @short_name_1 VARCHAR(50);
DECLARE @short_name_2 VARCHAR(50);
DECLARE @short_name_3 VARCHAR(50);
DECLARE @cc_roster_id_emp_1 INT;
DECLARE @cc_roster_id_emp_2 INT;
DECLARE @cc_roster_id_emp_3 INT;
SELECT
@short_name_1 = effected_employee_1,
@short_name_2 = effected_employee_2,
@short_name_3 = effected_employee_3,
@injury_date = IncidentDate
FROM
HSEBE.dbo.MCA_Data
WHERE
(Classification = 'XX RI' OR Classification = 'YY RI')
ORDER BY
IncidentDate ASC
IF LEN(@short_name_1) > 0
THEN
SELECT @cc_roster_id_emp_1 = autoid
FROM cc_rosters
WHERE short_name = @short_name_1
IF LEN(@short_name_2) > 0
THEN
SELECT @cc_roster_id_emp_2 = autoid
FROM cc_rosters
WHERE short_name = @short_name_2
IF LEN(@short_name_3) > 0
THEN
SELECT @cc_roster_id_emp_3 = autoid
FROM cc_rosters
WHERE short_name = @short_name_3
IF @cc_roster_id_emp_1 > 0
THEN
UPDATE cc_rosters
SET most_recent_injury = @injury_date
WHERE autoid = @short_name_1
IF @cc_roster_id_emp_2 > 0
THEN
UPDATE cc_rosters
SET most_recent_injury = @injury_date
WHERE autoid = @short_name_2
IF @cc_roster_id_emp_3 > 0
THEN
UPDATE cc_rosters
SET most_recent_injury = @injury_date
WHERE autoid = @short_name_3
END
Я получаю следующие ошибки:
Сообщение 156, Уровень 15, Состояние 1, ПроцедураspLocal_Safety_Sync, строка 28
Неправильный синтаксис рядом с ключевым словом THEN.
Сообщение 156, уровень 15, состояние 1, процедура spLocal_Safety_Sync, строка 30
Неверный синтаксис рядом с ключевым словом "THEN".
Сообщение 156, уровень 15, состояние 1, процедура spLocal_Safety_Sync, строка 32
Неверный синтаксис рядом с ключевым словом 'THEN'.
Сообщение 156, уровень 15, состояние 1, процедура spLocal_Safety_Sync,Строка 35
Неверный синтаксис рядом с ключевым словом then.
Сообщение 156, Уровень 15, Состояние 1, Процедура spLocal_Safety_Sync, Строка 37
Неправильный синтаксис рядом с ключевым словом 'then'.
Сообщение 156, Уровень 15, Состояние 1, Процедура spLocal_Safety_Sync, Строка 39
Неверный синтаксис рядом с ключевым словом 'then'.
Не уверен, куда повернуть отсюда ....
Не всегда будет effect_employee_1,2,3, и иногда выбранное значение не будет возвращено из другой базы данных.