0

我在使用 SQL 时遇到了一点麻烦。这是表客户:

ID      Name     Address                Phone

KP001   Bill     Jl Bali NO 27          81976524451
KP002   Jane     Jl Sandang NO 5        81876537521
KP003   Dion     Jl Kebon Jeruk NO 7    81684234913

原始结构表 Customer :

CREATE TABLE Customer
(
ID char(5)primary key not null,
Name varchar(20),
Address varchar(30),
Phone varchar(12),
constraint cs2 check (LEN(ID)=5),
constraint cs3 check (ID like 'KP[0-9][0-9][0-9]'),
)

我想使用 Alter Table 更改表结构。我想向表客户添加约束,“否”之后的地址必须是数字。

首先,在印度尼西亚,有些街道名称使用“NO”作为指示街道编号。并要求“NO”后的客户表是一个数字。我试过这个查询:

ALTER TABLE Customers WITH NOCHECK
ADD CONSTRAINT cs_address 
CHECK (CHARINDEX('no',Address)>1 AND
ISNUMERIC ( SUBSTRING (Address,7,2)) =1)

我知道查询不正确,但您能帮我修复错误并获得正确的结果吗?

*对不起,如果我的英语不好

4

1 回答 1

0

正如我在评论中所说,我会将表格重组为:

CREATE TABLE Customers (
    ID int not null,
    Name varchar(10) not null,
    Address varchar(50) not null,
    Address_No int not null, --Could also be varchar if we need to support leading 0s
    Phone varchar(10) not null,
    Complete_Address as Address + ' NO ' + CONVERT(varchar(10),Address_No),
    constraint CK_Address_No CHECK (Address_No > 0)
)

这更加强烈地执行了约束。

于 2013-12-16T08:04:27.060 回答