DiagnoseRecord (DID int, PCardID char (18), дата DDay, DStatus smallint, FDay date) Первичный ключ - DID; DStatus включает в себя: 1: новая корона диагностирована; 2:> новая корона подозревается; 3: новая корона исключена
DROP TABLE IF EXISTS `DiagnoseRecord`;
CREATE TABLE DiagnoseRecord(
DID int PRIMARY KEY AUTO_INCREMENT,
PCardID char(18) NOT NULL,--
DDay date NOT NULL,
DStatus smallint NOT NULL,
FDay date,
CHECK(DStatus>0 AND DStatus<4)
);
DROP PROCEDURE IF EXISTS insertDR;
CREATE PROCEDURE insertDR()
BEGIN
DECLARE PCardID1 char(18);
DECLARE DDay1 date;
DECLARE DStatus1 smallint;
DECLARE FDay1 date;
DECLARE number int;
SET number = 0;
WHILE number<1000 DO
SELECT PCardID INTO PCardID1 FROM passenger WHERE(age=3+FLOOR(RAND()*90)) ORDER BY RAND() LIMIT 1;
SET DDAY1=date_add('2020-01-22', interval FLOOR(RAND()*90) day);
SET DStatus1 = FLOOR(1+RAND()*3);
SET FDay1=IF(DStatus1=3,NULL,date_add('2020-01-22', interval FLOOR(RAND()*90) day));
--if null then there is no case.
SET number=number+1;
INSERT INTO DiagnoseRecord(PCardID,DDay,DStatus,Fday)
VALUES(PCardID1,DDay1,DStatus1,FDay1);
END WHILE;
END;
CALL insertDR();
Я пытаюсь выяснить, как преобразовать эту функцию в sql серверный синтаксис
, что я и сделал.
CREATE PROCEDURE insertDR
AS
BEGIN
DECLARE @PCardID char(18);
DECLARE @DDay date;
DECLARE @DStatus smallint;
DECLARE @FDay date;
DECLARE number int;
SET @number = 0;
WHILE @number<1000
begin
SELECT top 1 @PCardID=PCardID FROM passenger WHERE(age=3+FLOOR(RAND()*90))ORDER BY RAND() ;
SET @DDAY=DATEADD(day, FLOOR(RAND()*90), '2020-01-22');
SET @DStatus = FLOOR(1+RAND()*3);
SET @FDay=IIF(@DStatus=3,NULL,DATEADD(day, FLOOR(RAND()*90), '2020-01-22'));
SET @number=@number+1;
INSERT INTO DiagnoseRecord(PCardID,DDay,DStatus,Fday) VALUES(@PCardID,@DDay,@DStatus,@FDay);
END
END;
Я не получаю ошибок, но процедура не работает должным образом. он отлично работает на моем mysql сервере от Navicat.