oracle - comment faire pour utiliser la séquence d'auto-incrément id?

J'ai une table de base de données oracle:

CREATE TABLE "DogInfo" (
"Id" NUMBER NOT NULL ENABLE,
"DogName" VARCHAR2 (50 CHAR) NOT NULL ENABLE,
"DogAge" NUMBER NOT NULL ENABLE,
CONSTRAINT "DogInfo_PK" PRIMARY KEY ("Id") ENABLE
);

CREATE SEQUENCE "DOGINFO_SEQ" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;

CREATE OR REPLACE TRIGGER  "BI_DogInfo" 
BEFORE INSERT ON "DogInfo" FOR EACH ROW
WHEN (NEW."Id" IS NULL OR NEW."Id" = 0) BEGIN
    SELECT "USERINFO_SEQ".nextval INTO :NEW."Id" FROM dual;
END;

ALTER TRIGGER  "BI_DogInfo" ENABLE;

Si j'insère les 20 dossiers dans le tableau avec outil de base de données, puis utiliser mon C# une application web pour insérer des enregistrements, le chien le code d'identification de commencer à 1, plutôt que de 21.

Quelqu'un peut m'aider à corriger ce bug?

Grâce.

  • dans votre code C# alors êtes-vous en passant de la "Id" de la colonne? je suppose que vous devez être. le déclencheur est codé à feu (lorsque la clause) si l'ID n'est pas passé. Aussi je vous conseille de ne pas utiliser cité les noms en DB objets.
  • Je ne suis pas sûr que j'ai suivi à la question. Êtes-vous d'insérer les 20 premières lignes avant de créer l'élément déclencheur? Êtes-vous d'insérer les 20 premières lignes en spécifiant explicitement un "Id" de la valeur, donc de prévenir le déclenchement de tir? Est votre application C# en passant dans les valeurs de "Id" qui provoquent le déclenchement de court-circuité (c'est à dire le passage d'une valeur de 1 explicitement)?
  • les 20 premières lignes avec la valeur de l'id. Il n'y a pas de "Id" de la colonne dans mon code c#.
  • Dans certains cas, j'ai besoin exact de la valeur de l'Id, e de.g: importation des données anciennes.
  • qu'est-ce que la "base de données de l'outil de génération alors? coller db insert latéral de tresorerie + code c#, comme une séquence sans cycle ne peut pas sauter en arrière et de réutiliser une ID qu'il a déjà généré.
  • Êtes-vous créer toutes les fixe-ID-données de la valeur de la première (c'est à dire l'importation de toutes les anciennes données) et toutes les données seront insérées à partir de votre c# code? Ou pour le dire d'une autre façon, est-il clair, propre, coupée de la vieille fixe des valeurs et de la nouvelle auto-incrémentation des valeurs, ou à tout le moins d'un plafond pour les anciennes valeurs? "Normal", façon de le faire serait de créer la séquence une fois que toutes les anciennes données est inséré, avec start with basée sur la valeur la plus élevée dans les données importées. La séquence ne peut pas savoir automatiquement sur les valeurs que vous avez définies manuellement.

InformationsquelleAutor Rock | 2012-12-10