Kann ich eine Tabelle mit Überprüfungsbeschränkung erstellen, deren Werte von SQL -Abfrage abhängig sind?
-
24-10-2019 - |
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.
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.