2014-09-22 148 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語句添加它。