Добавить ограничение с использованием T-SQL на основе условия - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь добавить ограничение на основе условия. Пример:

CREATE TABLE dbo.TestTable(
        [DbKey] [uniqueidentifier] NOT NULL,
        [GroupKey] [uniqueidentifier] NOT NULL,
        [EnableGroup] bit NOT NULL
        CONSTRAINT [TestTable_PK] PRIMARY KEY CLUSTERED 
        (
            [DbKey] ASC
        )
)ON [PRIMARY]

Таким образом, может быть несколько записей, которые будут иметь один и тот же GroupKey, но я хочу, чтобы максимум одна запись могла иметь для EnableGroup значение true для данного GroupKey.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Вы можете использовать триггер для своей таблицы:

if exists(select 1
            from inserted i
           where exists(select 1
                          from dbo.TestTable tt
                         where tt.GroupKey = i.GroupKey
                           and tt.EnableGroup = 1
                         group by tt.GroupKey
                        having count(*) > 1))
begin
   raiserror('Some meaningful error message here.')
   rollback
   return
end
1 голос
/ 25 февраля 2011

Вы можете использовать проверочное ограничение со скалярным UDF, например:

go
create function dbo.EnabledGroupCount(
    @GroupKey uniqueidentifier)
returns int as begin
    return (
    select COUNT(*) from TestTable where GroupKey = @GroupKey and EnableGroup = 1
    )
end
go
alter table TestTable add constraint chk_TestTable 
    check (dbo.EnabledGroupCount(GroupKey) in (0,1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...