create database train
create table city(
city_id int identity(1,1),
city varchar(max)
)
create table train(
train_id int identity(1111,1111),
city_travels varchar(max)
)
insert into city values ('London');
insert into city values ('Chicago');
insert into city values ('NewYork');
insert into city values ('Delhi');
insert into train values ('1,3,4');
insert into train values ('4');
insert into train values ('1,2');
insert into train values ('1,2,3,4');
create table #train(
train_id int,
city varchar(max)
)
declare @count int, @id int,@first int;
declare @train_id int,@index int;
declare @city_travels varchar(max),@city_name varchar(max);
set @city_name=null;
declare train_cursor CURSOR for
select train_id,city_travels from train
open train_cursor
fetch next from train_cursor into @train_id,@city_travels
while (@@fetch_status=0)
begin
set @first=0;
set @index = charindex(',',@city_travels);
if(@index!=0)
begin
if(@first=0)
begin
set @id=convert (int,substring(@city_travels,1,@index-1));
set @city_travels=substring(@city_travels,@index+1,len(@city_travels));
set @city_name=((select city from city where [email protected])+',');
set @index=charindex(',',@city_travels);
set @first=1;
end
while(@index!=0)
begin
set @id=convert (int,substring(@city_travels,1,@index-1));
set @city_travels=substring(@city_travels,@index+1,len(@city_travels));
set @index=charindex(',',@city_travels)
set @city_name=(@city_name+(select city from city where [email protected])+',');
end
set @id=convert (int,@city_travels);
set @city_name=(@city_name+(select city from city where [email protected]));
insert into #train values (@train_id,@city_name);
set @city_name=null;
end
else
begin
set @id=convert (int,@city_travels);
set @city_name=(select city from city where [email protected]);
insert into #train values (@train_id,@city_name);
set @city_name=null;
end
fetch next from train_cursor into @train_id,@city_travels
end
select * from city;
select * from train;
select * from #train;
close train_cursor
deallocate train_cursor
truncate table #train
最近几个专栏中的所有CSV数据都是如此。仅供参考,你做错了。在“TRAIN”表中丢失“CITY_TRAVELS”列,并用“TRAIN_ID”和“CITY_ID”列创建另一个表“TRAIN_CITY”。请参阅http://en.wikipedia.org/wiki/Junction_table – Phil
为什么用逗号分隔的废话违反数据库设计的所有原则?存储的旅行正常化,然后你不必去写疯狂的查询,永远不会执行 – SQLMenace
*“设计是不是很棒”*是一个**史诗**轻描淡写 – Phil