在SQL中创建表时使用条件

时间:2017-07-19 07:37:10

标签: sql sql-server

我想创建一个条件

的表
create table TOTO
(
    Id int not null, 
    zip  as (if(zip > '00999' and zip < '96000') then zip) ,
    PRIMARY KEY (Id)
);

我得到的只是一条错误信息。

你知道怎么用char类型的“zip”做到这一点? 谢谢你的帮助!

4 个答案:

答案 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 INSERTINSTEAD 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函数