Может кто-нибудь помочь преобразовать этот mysql скрипт в MS sql сервер - PullRequest
0 голосов
/ 02 мая 2020

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...