求一个SQL SERVER的存储过程写法? ( 积分: 50 )

  • 主题发起人 主题发起人 super12345
  • 开始时间 开始时间
S

super12345

Unregistered / Unconfirmed
GUEST, unregistred user!
如何从一个表中把这样子的记录转成另一个表中记录。。。。

表1 
f1 f2 f3 f4
50 60 80 90
100 150 200 0
表2 结构如下。
T v
如何把表1字段后缀的1、2、3、4 做为一个值,并把对应的表1该字段的不为零的记录值做为表2v的值
写入表2
执行后的表2的结果如下
T v
1 50
2 60
3 80
4 90
1 100
2 150
3 200
别告诉我,按字段一个个去插入。
 
如何从一个表中把这样子的记录转成另一个表中记录。。。。

表1 
f1 f2 f3 f4
50 60 80 90
100 150 200 0
表2 结构如下。
T v
如何把表1字段后缀的1、2、3、4 做为一个值,并把对应的表1该字段的不为零的记录值做为表2v的值
写入表2
执行后的表2的结果如下
T v
1 50
2 60
3 80
4 90
1 100
2 150
3 200
别告诉我,按字段一个个去插入。
 
create proc name
as
select '1' as s, f1 from f
union
select '2' as s, f2 from f
union
select '3' as s,f3 from f
union
select '4' as s,f4 from f
go
 
create proc name
as

select '1' as s, f1 into table2 from table1
union
select '2' as s, f2 from table1
union
select '3' as s,f3 from table1
union
select '4' as s,f4 from table1
go
 
同意楼上
 
create proc name
as
select T= 1,v=f1 from f
union
select T= 2,v=f2 from f
union
select T= 3,v=f3 from f
union
select T= 4,v=f4 from f
order by v
go
 
可以到SysObjects中先取出该表的字段名称,然后直接去该字段的值即可啊
如下

Declare ZD_List Cursor For
Select Name From SysColumns Where ID In ( Select Name From SysObjects Where xtype='U' AND Name='表2')
Open ZD_List
Declare @Name Varchar(30)
Fetch Next From ZD_List Into @Name
While @@Fetch_Status=0
begin
Exec('Inset 表2 (T,V) Select Left('''+@Name+''',1),'+@Name+' From 表1')
Fetch Next From ZD_List Into @Name
end
Close ZD_List
Deallocate ZD_List
我没有测试过,你可以自己调试一下,绝对可以读取字段的值和插入,而且如果写的好的话,当表1中的字段增加时,不需要修改程序都可以
 
后退
顶部