Forums Neueste Beiträge
 

UDF in CHECK-Constraint

23/09/2010 - 13:07 von Gunter Becker | Report spam
Hallo zusammen,

ich möchte in einem CHECK-Constraint eine benutzerdefinierte Funktion
verwenden.
Diese Funktion gibt mir einen Wert vom Datentyp bit zurück. In meinem
CHECK-Constraint möchte ich jetzt diesen Rückgabewert auf false
testen. Meiner Meineung nach muss dann der CHECK-Constraint wie folgt
aussehen:

ALTER TABLE [dbo].[csogis_Connections] ADD CONSTRAINT
[CK_csogis_Connections] CHECK ([dbo].
[fn_csogis_CheckInternalConnectionName]([Name],[Direction]) = 0)

Allerdings bekomme ich eine Fehlermeldung, dass ein Fehler mit der
CHECK-Anweisung besteht. Keine Ahnung warum???

Folgende anderen Bedingungen funktionieren, bringen mich aber nicht
weiter:

= 1
<= 1

0



Folgende Bedingungen würden mich weiterbringen, funktionieren aber
nicht.

= 0
< 1
<> 1

Übrigens habe ich es auch schon mit CONVERT(bit,0) anstatt der
Ganzzahl probiert, mit genau dem gleichen Resultat. Ich stehe vor
einem Ràtsel und hoffe mir kann das irgendjemand erklàren. Bin ich
total auf dem Holzweg?

Danke schon einmal, Gunter

Hier noch meine UDF:

ALTER FUNCTION [dbo].[fn_csogis_CheckInternalConnectionName]
(
@Name nvarchar(50),
@Direction bit
)
RETURNS bit
AS
BEGIN
DECLARE @retval bit

SELECT @retval = CONVERT(bit,COUNT(*))
FROM csogis_Connections
WHERE Direction = @Direction AND Name = @Name

RETURN @retval

END
 

Lesen sie die antworten

#1 Lutz Uhlmann
23/09/2010 - 13:40 | Warnen spam
Blöde Frage, aber was soll dir der CHECK-Constraint eigentlich "checken"???

Deine Funktion prüft auf die Existenz von Name und Direction.
Und die Bedingung deines Checks ist, daß Name und Direction nicht
existieren.
Oberflàchlich gesehen hört sich das für mich nach einer Eindeutigkeit
für Name, Direction an ... wàre dann nicht ein eindeutiger Schlüssel
über den Spalten geeigneter???

Aber vielleicht gehts ja doch um was anderes ... das solltest du dann
nochmal genauer erlàutern ...

Lutz

Ähnliche fragen