Announcement

Collapse
No announcement yet.

Interbase Generator unter MS SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interbase Generator unter MS SQL

    hallo...

    ich muss eine application von interbase auf ms sql umstellen. um id's zu generieren verwende ich in interbase eine stored procedure GetNextID, die einen generator ausliest. ich brauche die procedure, da ich den wert von dem nach dem insert noch brauche. wie kann ich in ms sql eine gleichwertige procedure erzeugen?

    grüße

    volkmar

  • #2
    Hallo,

    das ist dort nicht notwendig, da das Schlüsselwort IDENTITY die Sache automatisch erledigt. Das folgende Beispiel legt in der Datenbank <i>tempdb</i> eine Tabelle an, deren Primärschlüsselwert beim Einfügen von Datensätzen automatisch hochgezählt wird:
    <pre>
    USE tempdb
    GO
    CREATE TABLE MailAdressen (
    RecID INTEGER NOT NULL IDENTITY PRIMARY KEY,
    VName VARCHAR(20) NOT NULL,
    NName VARCHAR(20) NOT NULL,
    eMail VARCHAR(30) NOT NULL,
    Genutzt BIT NOT NULL DEFAULT 0)
    GO
    INSERT INTO MailAdressen (VName,NName,eMail,Genutzt) VALUES ('Andreas','Kosch','[email protected]',1)
    GO
    </pre>
    Wenn der Zugriff über ADO erfolgt, "kennt" der Provider den Weg, um die vom SQL Server automatisch vergebene Nummer sofort an den Client (ADO) zurück zu liefern. Für den Fall, dass man diesen Automatismus nicht nutzen möchte, stehen die Systemfunktionen <b>@@IDENTITY</b> und <b>IDENT_CURRENT</b> zur Verfügung, um den Wert auszulesen

    Comment


    • #3
      ich brauche aber umbedingt eine stored-procedure, die mir einen eindeutigen wert liefert. gibt es da keinen trick, um eine solche stored procedure hinzukrigen

      Comment


      • #4
        Hallo,

        wozu soll das gut sein? Man hat doch verschiedene Optionen:

        1. Datensatz über INSERT einfügen, IDENTITY-Spalte vergibt automatisch eine Nummer, ADO holt sich automatisch diesen neuen Wert und zeigt ihn an.

        2. Datensatz über Stored Procedure anlegen (d.h. die Daten werden als INPUT-Parameter beim Aufruf der SP übergeben). Die Stored Procedure ruft nach dem INSERT den Wert über IDENT_CURRENT ab und liefert diesen Wert als Rückgabewert an den Aufrufer zurück.

        Wenn man <b>vor</b> dem INSERT eine Stored Procedure aufrufen will, die den neuen Wert ermittelt, muss die SP einen Dummy-Datensatz in eine Hilfstabelle eintragen, denn IDENTITY liefert den Wert nur <b>nach</b> dem Einfügen eines neuen Datensatzes zurück

        Comment


        • #5
          ich brauche den wert deshalb vor dem insert, da ich eine bestehene dbxpress - application (im moment mit interbase als db arbeitet) auch auf dem ms sql server zu laufen kriegen muss. bei interbase gibt es keine autoinc felder und diese mit tiggern zu simulieren ist aufwendig. deshalb ist der weg über die stored procedure optimal

          Comment


          • #6
            Hallo,

            &gt;..eine bestehene dbxpress ... auch auf dem ms sql server...

            wird mit Delphi 7 gearbeitet und der neue dbExpress-Treiber von Borland für den MS SQL Server verwendet? Wenn ja, ist das zur Zeit sehr riskant - mit hoher Wahrscheinlichkeit landet irgendwann Datenmüll in der Datenbank (siehe Quality Central Report 2369)

            Comment


            • #7
              Danke für den hinweis. Ich hab aber gelesen, daß dieser fehler schnellstmöglich behöben wird. Alternativ dazu könnte ich aber auch den dirver von crlab verwenden. deren driver sind angeblich eh besser als die von borland (zumindest der für oracle)

              Comment

              Working...
              X