Я новичок в хранимых процедурах, и я создал этот курсор, который будет запускаться в полночь каждую ночь и прокручивать запись последних дней, если ее не прекратить. При выполнении я получаю сообщение об ошибке каждый раз. Я не уверен, что вызывает его. Любая помощь приветствуется.SQL ERROR на хранимой процедуре
Msg 102, Level 15, State 1, процедура nt_rollover_charge, линия 38 Неправильный синтаксис около 'nt_cursor'.
CREATE PROCEDURE nt_rollover_charge
AS
BEGIN
SET NOCOUNT ON;
DECLARE @id VARCHAR(20);
DECLARE nt_cursor CURSOR FOR
SELECT DISTINCT log_id
FROM log_book
WHERE test_id = '3'
AND nt_dc_status = 'FALSE'
AND nt_current_date = 'TRUE';
OPEN nt_cursor
FETCH NEXT FROM nt_cursor INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE log_book
SET nt_current_date = 'False'
WHERE log_id = @id
INSERT INTO log_book
(mrn,
fin,
ref_dr,
tech,
equip_id,
hookup_id,
indication,
abnormality,
location_id,
test_id,
charged,
start_date,
nt_rollover_date,
nt_dc_status,
nt_current_date)
(SELECT mrn,
fin,
ref_dr,
tech,
equip_id,
hookup_id,
indication,
abnormality,
location_id,
test_id,
NULL,
start_date,
getdate(),
'FALSE',
'TRUE'
FROM log_book
WHERE @id = log_id)
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM nt_cursor INTO @id
END
CLOSE nt_cursor
DEALLOCATE nt_cursor
END
'INSERT INTO log_book .... (SELECT' должен быть' INSERT INTO log_book .... SELECT' без круглых скобок. Не похоже, что вам все равно нужен курсор. –
также, я думаю, вы могли бы сделать это без курсоров ... –
@MartinSmith Исходный TSQL, отправленный OP, не имел 'END' в конце процедуры, поэтому он не разобрал и не дал ошибку выше. После вашей ревизии существует' END' , и код правильно анализируется (конечно, это что-то другое). – Pondlife