CREATE TABLE PEOPLE
(
NUM CHAR(12) PRIMARY KEY,
NAME CHAR(20),
JOB CHAR(40) /* 我想要的是从 (C++开发工程师,JAVA软件工程师,PHP高级工程师)这几个中选择一个、二个或者是全
选,这个该怎样实现??*/
)求高手指点迷津急啊
(
NUM CHAR(12) PRIMARY KEY,
NAME CHAR(20),
JOB CHAR(40) /* 我想要的是从 (C++开发工程师,JAVA软件工程师,PHP高级工程师)这几个中选择一个、二个或者是全
选,这个该怎样实现??*/
)求高手指点迷津急啊
if OBJECT_ID('PEOPLE','U') is not null drop table PEOPLE
go
if OBJECT_ID('jobtype','U') is not null drop table jobtype
go
--想创建一张工作性质维护表,把数据维护进去
create table jobtype
(
id int,
[description] varchar(2000)
)
go
insert into jobtype
select 1,'C++开发工程师' union all
select 2,'JAVA软件工程师' union all
select 3,'PHP高级工程师'
go
select * from jobtype
go
--创建表是,使用Check 约束,只可以是1 C++开发工程师,2 JAVA软件工程师,3 PHP高级工程师
CREATE TABLE PEOPLE
(
NUM CHAR(12) PRIMARY KEY,
NAME CHAR(20),
--增加check 约束,对应jobtype表信息
JOBType varchar(40) check(charindex(JOBType,'123')>0)
)
go
insert into PEOPLE
select 1,'test','12'
go
select
a.NUM,
a.NAME,
--翻译信息,但是不建议采用这种方式,楼主可以采用在清单里下功夫,
--比如增加 【4 C++开发工程师 and JAVA软件工程师】 等方式,这样就不需要下面这么费劲的转换
Jobtype=stuff((select ','+[description] from jobtype
where charindex(ltrim(id),a.JOBType)>0 for xml path('')),1,1,'')
from PEOPLE a
/*
(1 row(s) affected)
NUM NAME Jobtype
------------ -------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 test C++开发工程师,JAVA软件工程师(1 row(s) affected)
*/
CREATE TABLE PEOPLE
(
NUM CHAR(12) PRIMARY KEY,
NAME CHAR(20),
JOB CHAR(40)
constraint ck_PEOPLE_job check(charindex('C++开发工程师',JOB)>0 or charindex('JAVA软件工程师',JOB)>0 or charindex('PHP高级工程师',JOB)>0)
)
新建一个job表,有个字段可以关联人员表,
job表存清单,
peoplerefjob 是维护表...