日期:2014-05-18 浏览次数:20497 次
insert tab(F1,F2,F3) select F1,F2,F from tab a,( select 1 as F union all select 2 union all select 3 ) as t where a.F3 <> t.F and not exists ( select 1 from tab where F1 = a.F1 and F2 = a.F2 and F3 = t.F ) insert tab(F1,F2,F3) select F1,F,F3 from tab a,( select 1 as F union all select 2 union all select 3 ) as t where a.F2 <> t.F and not exists ( select 1 from tab where F1 = a.F1 and F2 = t.F and F3 = a.F3 ) insert tab(F1,F2,F3) select F,F2,F3 from tab a,( select 1 as F union all select 2 union all select 3 ) as t where a.F1 <> t.F and not exists ( select 1 from tab where F1 = t.F and F2 = a.F2 and F3 = a.F3 )
------解决方案--------------------
create table tb(ID int identity(1,1),F1 int,F2 int,F3 int) insert into tb select 3,1,1 go insert into tb select f1+1,f2,f3 from tb union all select f1+2,f2,f3 from tb union all select f1,f2+1,f3 from tb union all select f1,f2+2,f3 from tb union all select f1,f2,f3+1 from tb union all select f1,f2,f3+2 from tb go select * from tb /* ID F1 F2 F3 ----------- ----------- ----------- ----------- 1 3 1 1 2 4 1 1 3 5 1 1 4 3 2 1 5 3 3 1 6 3 1 2 7 3 1 3 (7 行受影响) */ go drop table tb
------解决方案--------------------
create table tb(ID int identity(1,1),F1 int,F2 int,F3 int) insert into tb select 3,1,1 go insert into tb select f1-1,f2,f3 from tb union all select f1-2,f2,f3 from tb union all select f1,f2+1,f3 from tb union all select f1,f2+2,f3 from tb union all select f1,f2,f3+1 from tb union all select f1,f2,f3+2 from tb go select * from tb /* ID F1 F2 F3 ----------- ----------- ----------- ----------- 1 3 1 1 2 2 1 1 3 1 1 1 4 3 2 1 5 3 3 1 6 3 1 2 7 3 1 3 (7 行受影响) */ go drop table tb
------解决方案--------------------
use Tempdb go --> --> declare @T table([ID] INT IDENTITY,[F1] int,[F2] int,[F3] int) Insert @T select 3,1,1 INSERT @T Select [F1],[F2],[F3]=b.ID from @T AS a,(SELECT 1 AS ID UNION ALL SELECT 2 UNION ALL SELECT 3)b WHERE a.f3<>b.ID UNION ALL Select [F1],[F2]=b.ID,[F3] from @T AS a,(SELECT 1 AS ID UNION ALL SELECT 2 UNION ALL SELECT 3)b WHERE a.f2<>b.ID UNION ALL Select [F1]=b.ID,[F2],[F3] from @T AS a,(SELECT 1 AS ID UNION ALL SELECT 2 UNION ALL SELECT 3)b WHERE a.f1<>b.ID SELECT * FROM @T
------解决方案--------------------
declare @t table(id int,f1 int ,f2 int,f3 int); declare @tx table(id int); insert into @t select 1,3,1,1; --这里可以修改 insert into @tx select 1 union all select 2 union all select 3; select x.* from ( select a.id as f1,b.id as f2,c.id as f3 from @tx a cross join @tx b cross join @tx c ) x join @t y on x.f1=y.f1 and x.f2=y.f2 or x.f1=y.f1 and x.f3=y.f3 or x.f2=y.f2 and x.f3=y.f3; /* f1 f2 f3 ----------- ----------- ----------- 1 1 1 2