const { concat, interval, of, from } = rxjs;
const { share, delay, toArray, takeUntil, mergeMap } = rxjs.operators;
const waitUntil = signal$ => source$ => {
const sharedSource$ = source$.pipe(share());
return concat(
sharedSource$.pipe(
takeUntil(signal$),
toArray(),
mergeMap(from)
),
sharedSource$
);
}
const stopWaiting$ = of('signal').pipe(delay(2000));
const source$ = interval(500).pipe(
waitUntil(stopWaiting$)
).subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.js"></script>
Можно использовать проверочное ограничение на столбец. IIRC синтаксис для этого похож:
create table foo (
[...]
,Foobar int not null check (Foobar > 0)
[...]
)
Как в плакате ниже говорится (благодарит Constantin), необходимо создать проверочное ограничение вне определения таблицы и дать ему понятное имя, таким образом, это очевидно, к какому столбцу он относится.
alter table foo
add constraint Foobar_NonNegative
check (Foobar > 0)
Можно вынуть текст проверочных ограничений из системного словаря данных в sys.check_constraints
:
select name
,description
from sys.check_constraints
where name = 'Foobar_NonNegative'
Создайте ограничение базы данных:
ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0)
У Вас могут быть довольно сложные ограничения, также включающие несколько столбцов. Например:
ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL)
Добавьте a CHECK
ограничение при составлении таблицы
CREATE TABLE Test(
[ID] [int] NOT NULL,
[MyCol] [int] NOT NULL CHECK (MyCol > 1)
)
Я полагаю, что Вы хотите добавить ОГРАНИЧЕНИЕ к полю таблицы:
ALTER TABLE tableName WITH NOCHECK
ADD CONSTRAINT constraintName CHECK (columnName > 0)
Тот дополнительный NOCHECK используется, чтобы помешать ограничению применяться к существующим строкам данных (который мог содержать недопустимые данные) и позволить ограничению быть добавленным.