SQL Server создает таблицу с уникальным столбцом, не равным нулю и не пустым (проверьте)

Как создать таблицу с уникальным столбцом, не нулевым и не пустым (проверить)?

Я пробовал ниже Query

CREATE TABLE Persons 
(
P_Id int NOT NULL UNIQUE,
LastName nvarchar(255) NOT NULL,
FirstName nvarchar(255),
Address nvarchar(255),
City nvarchar(255),
CHECK (P_Id>0)
)

Когда я пытаюсь создать таблицу с ограничениями UNIQUE и CHECK, она выдает следующую ошибку. Можно ли использовать два ограничения в одном запросе?

Major Error 0x80040E14, Minor Error 25501
> CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName nvarchar(255) NOT NULL,
FirstName nvarchar(255),
Address nvarchar(255),
City nvarchar(255),
CHECK (P_Id>0)
)
There was an error parsing the query. [ Token line number = 8,Token line offset = 1,Token in error = CHECK ]. I am using SQL Server 2008. 

person Psyche Genie    schedule 22.09.2014    source источник
comment
Создать информацию о таблице Создать таблицу   -  person Tak    schedule 22.09.2014
comment
Действительно возможно иметь все три ограничения в одной строке (NOT NULL, UNIQUE и CHECK(yourconstraint...) ), но CHECK должен быть в одной строке с переменной, которую вы ограничиваете, а запятая должна быть после контрольного выражения.   -  person    schedule 22.09.2014


Ответы (4)


Это должно быть что-то вроде этого.

 CREATE TABLE [dbo].[TABLE1](
        [COL1] [nvarchar](50) NOT NULL UNIQUE
    )

    ALTER TABLE [dbo].[TABLE1] WITH CHECK 
    ADD CONSTRAINT [CK_TABLE1] CHECK  (([COL1]<>N''))
person Bhasyakarulu Kottakota    schedule 22.09.2014

для этой проблемы вы можете использовать ограничение на сервере sql

ALTER TABLE TBL  WITH CHECK ADD  CONSTRAINT [CK_TBL] CHECK  
(([dbo].[TBLCheckCustomeUnique](ID)=(1)))

TBLCheckCustomeUnique — определяемая пользователем функция, которая проверяет эти условия.

person Mehdi Haghshenas    schedule 22.09.2014

Вы можете контролировать уникальность столбца или набора столбцов с помощью UNIQUE ограничение.

Данные, хранящиеся в столбце или наборе столбцов, могут быть проверены/управлены (и принуждены с помощью различных правил) с помощью CHECK ограничение.

Ограничение CHECK для достижения вашей цели заключается в следующем:

ALTER TABLE [YourTable]
  ADD CONSTRAINT CK_CheckConstraintName
    CHECK (LEN([YourColumn]) >= {MinimumColumnWidth})

Вы можете добавить ограничения в инструкции CREATE TABLE или если таблица уже существует. вы можете добавить его с помощью оператора ALTER TABLE .. ADD CONSTRAINT.

person Pred    schedule 22.09.2014

person    schedule
comment
Если вы используете более старую версию, чем SQL Server 2008, попробуйте использовать LEN() вместо DATALENGTH(). - person ; 22.09.2014