SQL Server - Überprüfen Sie die Einschränkung auf einer Spalte, in der Werte von einer anderen Tabelle stammen

StackOverflow https://stackoverflow.com/questions/3200795

Frage

Wie setzt man eine Überprüfungsbeschränkung auf eine Säule, so dass sein Bereich akzeptabler Werte von einer anderen Tabelle stammt, ohne Hardcoding?

Hier ist ein vereinfachtes Beispiel:

generasacodicetagpre.

Ich möchte eine Überprüfungseinschränkung auf onemanTable.taskid-Säule einfügen, so dass akzeptable Werte aus der Spalte der anderen Tabellen stammen, d. H. von metadatatierbar.Value wo metadatatable.class= 'a'

Ich habe bereits versucht, eine Überprüfungseinschränkung des Formats zu erstellen

generasacodicetagpre.

Dies wird jedoch nicht unterstützt.

Auf der anderen Seite arbeitet auf der TaskID in ('Val1', 'val2') als Prüfbeschränkung in SQL2K8 (nicht in SQL2000!), aber es ist aufgrund von Hardcoding nicht akzeptabel.

Wie kann ich erreichen, was ich will, ob per Überprüfung der Einschränkung oder einem anderen Fancy-Mechanismus, den ich nicht bewusst bin?

ps.Muss auf der Datenbankseite sein, keine kundenseitige Überprüfung, wie es mir von jemandem vorgeschlagen wurde.

War es hilfreich?

Lösung

Es ist wahrscheinlich keine gute Praxis, um einzukommen, aber Sie können eine benutzerdefinierte Funktion schreiben, die Ihre TaskID als Parameter akzeptiert und je nachdem, ob die TaskID in den bereitgestellten Bereich fällt, auf true oder FALSE angenommen werden soll oder nichtIhre metadatatierbar.

Erlauben Sie, dass Sie die Funktionalität erhalten, die Sie suchen - Check-Beschränkungen sind wirklich nur einfache Funktionen, die zum Begrenzen des Sortiments einer Säule ausgelegt sind, und ihr Verhalten wurde dadurch entworfen, so dass Sie deshalb entworfen wurdenUnterabfragen können nicht innerhalb einer Prüfbeschränkung in SQL Server schreiben.

Sie können jedoch eine SELECT-Anweisung innerhalb einer benutzerdefinierten Funktion schreiben und von einer Überprüfungseinschränkung anrufen.

Andere Tipps

Eine Prüfeinschränkung gegen Werte aus einer anderen Tabelle würde typischerweise als Fremdschlüsselbedingung ausgelegt.Das ist der Mechanismus, der zur Verbindungstabelle auf Werten verknüpft ist.

Check-Einschränkungen sind wirklich nur zum Definieren von

ausgelegt

  • Minimale oder Maximalwerte
  • reichen
  • Aufzählungen eines bestimmten Satzes von Werten

Ich glaube also nicht, dass Sie tun können, was Sie tun, was Sie tun möchten, denn das ist wirklich das falsche Merkmal, das Sie dafür verwenden möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top