我是SQL新手,我正在尝试创建一个带约束的表,但我之前没有使用过constrant,我实际上并不确定这个约束对于PId,LastName的uc_ID是什么?
我想创建一个只允许列中字母数字值的约束?
代码:
CREATE TABLE Persons
(
PId int identity(1,1) NOT NULL,
LastName varchar(25) NOT NULL,
FirstName varchar(25) NOT NULL,
Address1 varchar(25) NOT NULL,
City varchar(25) NOT NULL
CONSTRAINT uc_ID UNIQUE (PId,LastName)
)
CREATE TABLE E
(
PId int identity(1,1) NOT NULL,
LastName varchar (25) NOT NULL,
FirstName varchar (25) NOT NULL,
Address1 varchar (25) NOT NULL,
City varchar (25) NOT NULL
CONSTRAINT OnlyAlphanumeric CHECK ([FirstName] NOT LIKE '%[^A-Z0-9]%')
)
另一个例子(不是):
CREATE TABLE EEE
(
PId int identity(1,1) NOT NULL,
FirstName varchar (50) NOT NULL,
CONSTRAINT CHECK ([FirstName] LIKE '%[A-Za-z]%')
)
答案 0 :(得分:1)
表示Pid + LastName的组合必须是唯一的 由于Pid是一种身份,在正常情况下它不能被复制,所以约束似乎有所减少。
答案 1 :(得分:1)
尝试:
ALTER TABLE TableName ADD CONSTRAINT Only_Characters_And_Numbers CHECK ColumnName NOT LIKE '%[^A-Z0-9 ]%'
答案 2 :(得分:0)
如果您想要一个只允许列中包含字母数字字符的约束,您可以使用此约束(例如FirstName
:
ALTER TABLE [Persons] ADD CONSTRAINT OnlyAlphanumeric CHECK ([FirstName] NOT LIKE '%[^A-Z0-9 ]%')
免责声明:taken from here(已测试)。
如果要在创建表时添加约束:
CREATE TABLE Persons
(
PId int identity(1,1) NOT NULL,
LastName varchar(25) NOT NULL,
FirstName varchar(25) NOT NULL,
Address1 varchar(25) NOT NULL,
City varchar(25) NOT NULL
CONSTRAINT OnlyAlphanumeric CHECK ([FirstName] NOT LIKE '%[^A-Z0-9 ]%')
)
请注意,每个数据库的约束名称都是唯一的。
或者,您可以创建AFTER INSERT
和AFTER UPDATE
触发器来进行此验证,但在这种情况下,约束可以正常工作。