SQL Server创建表,列唯一不空和非空(检查)

时间:2014-09-22 14:50:16

标签: sql sql-server database sql-server-2008 unique

如何创建一个具有唯一,非空且不为空(Check)的列的表?

我在“查询”

下面尝试过
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. 

4 个答案:

答案 0 :(得分:2)

它应该是这样的。

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

    ALTER TABLE [dbo].[TABLE1] WITH CHECK 
    ADD CONSTRAINT [CK_TABLE1] CHECK  (([COL1]<>N''))

答案 1 :(得分:2)

    CREATE TABLE tab
    (
       id  INT, 
      notnullandnotemptystr VARCHAR(10) NOT NULL UNIQUE CHECK (DATALENGTH(notnullandnotemptystr) > 0)
    )  

答案 2 :(得分:0)

对于这个问题,你可以在sql server

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

TBLCheckCustomeUnique是用于检查此条件的用户定义函数

答案 3 :(得分:0)

您可以控制UNIQUE约束设置的列或列的唯一性。

CHECK约束可以检查/控制(并使用各种规则强制)存储在列或列集中的数据。

实现目标的CHECK约束如下:

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

您可以在CREATE TABLE语句中添加约束,或者如果表已经存在,您可以使用ALTER TABLE .. ADD CONSTRAINT语句添加它。