Kann ich eine Tabelle mit Überprüfungsbeschränkung erstellen, deren Werte von SQL -Abfrage abhängig sind?

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

Frage

Ist es möglich, eine Tabelle zu erstellen, die eine Überprüfung in einer der Spalte enthält, deren Wert innerhalb des von einer anderen SQL -Abfrage angegebenen Ergebnisses liegt

z.B.

create table tablename
(
name varchar(10),
rollno int
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll)

oder so etwas.

Ich muss es nirgendwo benutzen, möchte aber immer noch wissen.

War es hilfreich?

Lösung

Wenn Sie nicht das erreichen können, was Sie mit einer Fremdschlüsselreferenz möchten, können Sie also die Auswahl der Auswahl in einem Funktionsaufruf einwickeln.

Ihr Ausdruck für Check -Beschränkungen sieht möglicherweise aus wie:

(dbo.SomeFunction([col1]) != 0)

Die Funktion könnte so aussehen (vorausgesetzt, die Spalte ist ein Varchar):

create function dbo.SomeFunction(@arg varchar(max))
returns bit
as
begin
return
(
    select count(*) from SomeOthertable where col2 = @arg
)
end

Edit (2010/06/9): In Bezug auf Anthonys Kommentar hat meine Tests gezeigt, dass a count(*) Der Wert von mehr als 1 wird immer noch als 1 zurückgegeben. Es scheint also, dass die Funktion in Ordnung ist, auch wenn sie wahrscheinlich explizit 1 oder 0 zurückgeben sollte oder, wenn Sie an der tatsächlichen RowCount interessiert sind Int.

Andere Tipps

Ja: Fremdschlüssel für gleiche Datenbanklinks

create table tablename
(
name varchar(10),
rollno int FOREIGN KEY (candidateRoll) REFERENCES OtherTableName (candidateRoll)
)

Wenn es sich um eine andere Datenbank handelt, verwenden Sie Code, z.

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