create table a( id int not null references dbo.a(Id) Var nvarchar(40) )gocreate table b( id int identity(1,1) not null primary key, Var nvarchar(40) go insert b values('英文') ...........
而得到用户的信息,可以用查询:select a.*,b.说明,其他 from 用户语言表 m join 注册表 a on a.用户ID=m.用户ID join 语言表 b on a.语言ID=m.语言ID
如果要得到的用户信息中,每个用户只显示一条,语言部分显示为: 英文,日文 的形式.可以用一个自定义函数来解决:create function f_getstr(@用户id int) returns varchar(8000) as begin declare @re varchar(8000) set @re='' select @re=@re+','+说明 from 语言表 a join 用户语言表 b on a.语言ID=b.语言ID where 用户ID=@用户ID set @re=substring(@re,2,8000) return(@re) end go
语言ID,说明,其他...注册表:
用户ID,用户名,其他...用户语言表
用户ID,语言ID
id int not null references dbo.a(Id)
Var nvarchar(40)
)gocreate table b(
id int identity(1,1) not null primary key,
Var nvarchar(40)
go
insert b
values('英文')
...........
from 用户语言表 m
join 注册表 a on a.用户ID=m.用户ID
join 语言表 b on a.语言ID=m.语言ID
英文,日文
的形式.可以用一个自定义函数来解决:create function f_getstr(@用户id int)
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+说明 from 语言表 a join 用户语言表 b on a.语言ID=b.语言ID
where 用户ID=@用户ID
set @re=substring(@re,2,8000)
return(@re)
end
go
select *,语言=dbo.f_getstr(用户ID) from 注册表
语言ID,说明
1 中文
2 英文
3 日文用户语言表
用户ID,语言ID
001 1
001 2
002 2
003 1
003 2
003 3是这样吗?
但用户ID是主键时不就……?还想请教
语言表:
语言ID,说明
1 中文
2 英文
3 日文用户语言表
用户ID,语言ID
001 1,2
002 2
003 1,2,3
就是将用户选择的连接成一个字符串,然后才一次插入的