2014-09-22 151 views
1

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

我想下面的查询

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) 
) 

当我尝试创建一个表,既独特又检查约束及其以下错误投掷。是否可以在单个查询中使用两个约束?

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. 
+0

创建表信息[创建表](http://msdn.microsoft.com/en-ca/library/ms174979.aspx) – Tak 2014-09-22 14:57:15

+1

它确实有可能对同一行的所有三个约束(NOT NULL,UNIQUE和CHECK(yourconstraint ...)),但CHECK必须与您约束的变量位于同一行,并且逗号应该在检查表达式之后。 – 2014-09-22 16:21:08

回答

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

如果您使用的是早于SQL Server 2008的版本,请尝试使用LEN()而不是DATALENGTH() – 2014-09-22 15:06:53

0

对于这个问题,你可以在SQL Server中使用约束

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

TBLCheckCustomeUnique是用户定义检查这个条件

2

功能应该是这样的一些东西。

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

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

我编辑了我的问题,请查看 – 2014-09-22 15:19:46

0

可以CONTROLL的由UNIQUE约束集列或列的唯一性。

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

CHECK约束来实现你的目标是:

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

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