我想创建一个条件
的表create table TOTO
(
Id int not null,
zip as (if(zip > '00999' and zip < '96000') then zip) ,
PRIMARY KEY (Id)
);
我得到的只是一条错误信息。
你知道怎么用char类型的“zip”做到这一点? 谢谢你的帮助!
答案 0 :(得分:3)
您可能希望使用CHECK约束
CREATE TABLE TOTO
(
Id int NOT NULL,
zip char,
PRIMARY KEY (Id),
CHECK (zip > '00999' AND zip < '96000')
);
答案 1 :(得分:1)
您可以使用CHECK CONSTRAINT或使用BEFORE INSERT
或INSTEAD OF
触发器
一个例子:
CREATE TRIGGER ChkZip
ON TOTO
INSTEAD OF INSERT
AS
BEGIN
IF (inserted.zip > '00999' and inserted.zip < '96000')
BEGIN
INSERT INTO TOTO (id,zip) VALUES (insered.id, inserted.zip)
END
ELSE
BEGIN
RAISERROR ('The entered zip code doesn't match criteria.' ,10,1)
ROLLBACK TRANSACTION
END
END
答案 2 :(得分:0)
您需要创建一个新的CHECK constraint,以确保您的字段在每次设置或修改(插入或更新)时都符合此约束。
这是一个适用于SQL服务器的示例(因为您似乎正在使用该dbms),其中约束已命名,因此您可以更轻松地识别它(更好的可维护性)
create table TOTO
(
Id int not null,
zip char ,
PRIMARY KEY (Id),
CONSTRAINT CHK_zip CHECK(zip > '00999' and zip < '96000')
);
请注意,您可以使用我提供的链接中的模式来制定它。
答案 3 :(得分:0)
CREATE TABLE TOTO
(
Id INT NOT NULL,
zip VARCHAR2(10),
PRIMARY KEY (Id),
CONSTRAINT CHK_zip CHECK (zip > to_number('00999') AND zip < to_number('96000'))
);
您可以使用检查约束 - 上面的脚本基于Oracle Sql函数