Donnerstag, Dezember 12, 2019

Wie fügen Sie eine not NULL FOREIGN KEY-Spalte zu einer vorhandenen (aufgefüllt) Tabelle in MS SQL?

Ich muss hinzufügen einer not NULL-Spalte zu einer vorhandenen (aufgefüllt) Tabelle, die einen Fremdschlüssel zu einer anderen Tabelle. Dies bringt zwei Probleme:

  1. Beim hinzufügen der Spalte, deren Wert darf nicht null sein – mit einer Standard-ist keine option (es sei denn, es wird später entfernt), da die Datenbank-Logik verwendet wird, in der server-seitige Validierung, wenn ein Benutzer einen neuen Datensatz, d.h., wenn die Anwendung versucht, einen Datensatz hinzufügen mit diesem Feld mit einem null-Wert, wird die Datenbank gibt eine Fehlermeldung, dass die Anwendung abgefangen und zurück an den Benutzer, mit der Aufforderung, es zu korrigieren.

  2. Die Säule hat eine foreign key-Einschränkung, was bedeutet, Ihr Wert MUSS vorhanden sein, in der fremden Tabelle.

Was ist der beste Weg zu gehen über diese?

InformationsquelleAutor Jimbo | 2010-03-11

2 Kommentare

  1. 16

    Erstellen Sie die Spalte, aber NULL zulassen.
    Füllen Sie die Spalte mit den korrekten Daten aus der Fremdschlüsseltabelle.
    Ändern Sie die Spalte hinzufügen, die nicht null sind.
    Fügen Sie die foreign key-Einschränkung.

    • Man könnte hinzufügen, die Spalte mit einem Standardwert, dann kopieren Sie über die richtigen Daten, dann legen Sie die default-Einschränkung. Anderen Weg, wird die gleiche Anzahl von Schritten. Ich glaube nicht, dass es viel „cooler“.
  2. 1

    Über Teile Ihrer Fragen ofc (nach Jahren):

    1.Wenn du meinst, dass der default-Wert wäre etwas so schlau, und Sie würden nicht brauchen, um es zu ändern in Zukunft, dann ist Ihr zu wünschen, ist falsch. warum?

    aus zwei Gründen:

    • a) In das Konzept der Default-Wert (in jeder, wo die Programmierung

      Sprachen, Datenbanken und so weiter…) der Standardwert ist nicht etwas, was
      ersetzen Sie den Wert dynamisch mit etwas, was Sie wollen. Für
      Beispiel Func Summe(a,b,c=10), in dieser situation, wenn Sie don ‚ T geben Sie den parameter c, es würde nehmen Sie es als 10, ansonsten sollten Sie

      statt etwas. also die default-Werte sind vorhersehbar und kalkulierbar

      Werte, NICHT die smart-Werte.
    • b) Foreign keys sind sogar noch etwas empfindlicher als eine optionale

      parameter in einer Methode, coz der relationalen Bedeutungen in RDBMS so u
      sicherlich Bearbeiten sollte, dass in Zukunft, vielleicht sogar manchmal ändern

      über und über base auf Verwendungen von DB.

    2.Es kann sein, Griff mit der code-ich werde es Ihnen zeigen.

    Daher Basis dieser Erläuterungen haben, könnten Sie eine Spalte mit der default-Wert, die vorhanden sind, in Schlüssel, aber es ist nicht etwas, das Sie brauchen, und Sie es aktualisieren sollten in Zukunft die Basis auf Ihre Nutzung. und für diese müssen Sie:

    ERSTE:

    • Erstellen Sie eine Funktion, die eine Valide und existieren Fremdschlüssel von
      spezifische Tabelle wie diese:
    CREATE FUNCTION SelectMinForeignKey()
    RETURNS INT
    AS
    BEGIN
      DECLARE @FirstID INT
      SELECT @FirstID = MIN(ID) from DetailTableExample01
      RETURN @FirstID
    END

    ZWEITE:

    • Dann sollten Sie ändern Tabelle Spalte hinzufügen, wie dies:
    ALTER TABLE example1 ADD NoNullableCol INT NOT NULL DEFAULT [dbo].SelectMinForeignKey()
    • oder mit hinzufügen Bezug sofort:
      ALTER TABLE example1 
        ADD NoNullableCol2 INT NOT NULL  DEFAULT [dbo].SelectMinForeignKey() ,
        FOREIGN KEY(NoNullableCol2) REFERENCES DetailTableExample01(id);
    • oder mehr komplett mit hinzufügen Einschränkung sofort und zuweisbar FK-name:
    ALTER TABLE dbo.example1 ADD
        NoNullableCol INT NOT NULL  DEFAULT [dbo].SelectMinForeignKey(),
        CONSTRAINT FK_example1_DetailTableExample01
        FOREIGN KEY (NoNullableCol) 
        REFERENCES dbo.DetailTableExample01 (ID) 
         ON UPDATE  CASCADE 
         ON DELETE  CASCADE;
    • oder:
    ALTER TABLE dbo.example1 ADD
        NoNullableCol INT NOT NULL  DEFAULT [dbo].SelectMinForeignKey()
    GO
    ALTER TABLE dbo.example1 ADD 
        CONSTRAINT FK_example1_DetailTableExample01
        FOREIGN KEY (NoNullableCol) 
        REFERENCES dbo.DetailTableExample01 (ID) 
         ON UPDATE  CASCADE 
         ON DELETE  CASCADE

    Bitte BEACHTEN Sie: Sie kennen die Tabellen-und Spaltennamen sind Beispiel.

    DRITTE:

    • Jetzt sollten Sie eine änderung der Werte in NoNullableCol, wie Sie wollen

    All-in-One:

    • Die gesamte Abfrage wäre so etwas wie dies
    CREATE FUNCTION SelectMinForeignKey()
    RETURNS INT
    AS
    BEGIN
      DECLARE @FirstID INT
      SELECT @FirstID = MIN(ID) from DetailTableExample01
      RETURN @FirstID
    END
    
    GO
    
    ALTER TABLE dbo.example1 ADD
        NoNullableCol INT NOT NULL  DEFAULT [dbo].SelectMinForeignKey(),
        CONSTRAINT FK_example1_DetailTableExample01
        FOREIGN KEY (NoNullableCol) 
        REFERENCES dbo.DetailTableExample01 (ID) 
         ON UPDATE  CASCADE 
         ON DELETE  CASCADE;

    Fertig!

    Hoffen, dass Sie Ihr problem lösen

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...