Theoretisch, was Sie können constraints, eine generische Art und Weise, dies zu tun, die folgenden sein (nicht getestet) mit Tischniveau erreicht werden sollen:
CREATE FUNCTION dbo.validateExpertise(
@expertise_type varchar(8),
@Expertise_animal varchar(30),
@Expertise_breed varchar(30)
)
RETURNS BIT
AS
BEGIN
IF (@Expertise_animal == 'dog' AND @Expertise_breed != 'dog')
RETURN 0;
-- other validations can come here
RETURN 1;
END
GO
-- add a table level constraint
-- WITH NOCHECK can be used to not check existing data
ALTER TABLE detailTable ADD CONSTRAINT chkExpertise
CHECK (dbo.validateExpertise(expertise_type, Expertise_animal, Expertise_breed) = 1)
Während dies Ihnen helfen kann, ist es nicht empfehlenswert, eine solche komplexe Validierung auf Datenbankebene vorzunehmen. Komplexe Validierungen sind (zumindest) in der Business-Schicht Ihrer Anwendung implementiert, die normalerweise innerhalb der Logic tier (in der Regel ASP.NET MVC, WCF-Dienst, Web-Service usw.) liegt (einige Validierungen werden auch in der Präsentationsschicht platziert) Rundreisen Zeitverzögerungen.
Datenbank soll in erster Linie für Datenpersistenz und holen. natürlich einfache Einschränkungen wie FK
s, unique
Einschränkungen, Spalte Constraints usw. sind willkommen zu vermeiden, da sie als eine gute Sicherheit handeln Netz
Denken Sie auch daran, dass Einschränkungen wie die oben genannten für jede oder UPDATE
in der Tabelle ausgelöst werden und die Pe erheblich verschlechtern können rformance für Abfragen mit einer großen Anzahl von Datensätzen.
Und wie möchten Sie Ihren SQL Server lehren, dass 'Pudel' tatsächlich ein' Hund' ist? – Ralph
Sie können Prüfbedingung erstellen – Dejan
Diese Prüfbedingung würde wie eine kleine Datenbank aussehen. –