Я пытаюсь реализовать контрольное ограничение в таблице, чтобы записи не могли быть вставлены там, где существует запись, для которой два столбца («Int_1» и «Int_2» «) уже есть значение, которое мы пытаемся вставить, например:Проверить ограничение UDF с несколькими входными параметрами, не работающими
ID Name Int_1 Int_2
1 Dave 1 2
подставляя (2, Стив, 2, 2) в таблице выше, было бы хорошо, равно как и (3, Майк, 1, 3) , но вставка значений, где Int_1 AND Int_2 уже существует, не допускается, т. е. (4, Стюарт, 1, 2) является незаконным.
Я думал, определяя, таким образом, мой стол будет работать:
CREATE TABLE [Table](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](255) NOT NULL,
[Int_1] [int] NOT NULL,
[Int_2] [int] NOT NULL,
CONSTRAINT [chk_Stuff] CHECK (dbo.chk_Ints(Int_1, Int_2)=1))
где: определяется dbo.chk_Ints:
CREATE FUNCTION [dbo].[chk_Ints](@Int_1 int,@Int_2 int)
RETURNS int
AS
BEGIN
DECLARE @Result int
IF NOT EXISTS (SELECT * FROM [Table] WHERE Int_1 = @Int_1 AND Int_2 = @Int_2)
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
GO
При использовании комбо выше, если я пытаюсь вставить любой записи вообще, SQL говорит мне, что я нарушил ограничение на проверку. Я могу удалить все строки из таблицы и попытаться вставить первую запись, а SQL говорит мне, что я нарушил ограничение, которое я не мог сделать!
Я давно искал интернет, ища примеры контрольных ограничений, где UDF зависит от нескольких столбцов таблицы, но безрезультатно. Любые идеи относительно того, почему это может не сработать?
Заранее спасибо :)
Весь взлом с UDF и контрольным ограничением является полным излишеством. Просто создайте * уникальный индекс * на '(int_1, int_2)' –
Спасибо. Это намного проще, чем я пытался это сделать! – LeeCambl