2017-08-22 7 views
1

je générer un DateTime aléatoire dans le tableau SQL Server en utilisant le code exemple suivantDivision par zéro erreur rencontrée - SQL Server

Exemple de code:

DECLARE @SeedInt INT = 0; 
SELECT DATEADD(minute,(-1 * (ABS(Checksum(NewID()) % (CASE WHEN @SeedInt IS NULL OR @SeedInt <= 0 THEN 2 ELSE @SeedInt END - 1))) + 1), SYSUTCDATETIME()); 

Son beau travail. Mais j'ai essayé la même approche dans une requête UPDATE, son échec à mettre à jour et lance une exception

Schéma de la table: StudentMark:

CREATE TABLE [dbo].[StudentMark] 
(
    [StudentMarkId] [int] IDENTITY(1,1) NOT NULL, 
    [StudentId] [uniqueidentifier] NOT NULL, 
    [SubjectId] [uniqueidentifier] NOT NULL, 
    [Score] [int] NOT NULL, 
    [ScoreInfo] [xml] NOT NULL, 
    [GeneratedOn] [datetime2](2) NOT NULL, 
    [IsPass] [bit] NOT NULL, 
    CONSTRAINT [PK_StudentMark] 
     PRIMARY KEY CLUSTERED ([StudentMarkId] ASC) 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

données de semences de l'échantillon

INSERT INTO [dbo].[StudentMark] ([StudentId], [SubjectId], [ScoreInfo], [GeneratedOn], [Score], [IsPass]) 
VALUES ('FC3CB475-B480-4129-9190-6DE880E2D581', '0D72F79E-FB48-4D3E-9906-B78A9D105081', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-10 10:10:15', 95, 1), 
     ('0F4EF48C-93E3-41AA-8295-F6B0E8D8C3A2', '0D72F79E-FB48-4D3E-9906-B78A9D105081', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-10 10:10:15', 100, 1), 
     ('0F4EF48C-93E3-41AA-8295-F6B0E8D8C3A2', 'AB172272-D2E9-49E1-8040-6117BB6743DB', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-16 09:06:20', 25, 0), 
     ('FC3CB475-B480-4129-9190-6DE880E2D581', 'AB172272-D2E9-49E1-8040-6117BB6743DB', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-16 09:06:20', 82, 1); 

Requête Mise à jour: (SQL Server)

Mais la requête déclenche une exception

Msg 8134, niveau 16, état 1, ligne 1 Division par zéro erreur rencontrée. La déclaration a été terminée.

Veuillez m'aider ce qui ne va pas dans la requête, que faut-il faire pour résoudre ce problème?

+1

Si StudentMarkId est un, vous obtiendrez zéro lorsque vous soustrayez un. Pour corriger, ne divisez pas par zéro. Je ne peux pas commencer à comprendre ce que ce calcul essaie d'accomplir, donc je ne sais pas exactement ce qui serait nécessaire – UnhandledExcepSean

+0

@Ghost - Dans mon exemple de code, j'ai généré 'DateTime' en utilisant' DECLARE @SeedInt INT = 0; 'Montrer comment cela va poser un problème? –

+2

Définissez votre valeur de départ à 1 et vous obtiendrez la division par zéro – UnhandledExcepSean

Répondre

1

Cela se produit lorsque l'opérande % est 0. Donc, utilisez NULLIF():

UPDATE SInfo 
    SET GeneratedOn = DATEADD(minute, 
           (-1 * (ABS(Checksum(NewID()) % NULLIF(CASE WHEN SInfo.StudentMarkId IS NULL OR SInfo.StudentMarkId <= 0 THEN 2 ELSE SInfo.StudentMarkId END - 1), 0)) + 1)), SYSUTCDATETIME()) 
    FROM dbo.StudentMark SInfo; 
+1

Veuillez vérifier la requête, il a un problème de syntaxe. –