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