MSSQL中,有位网友email问我的问题,下面是我给出的方案,大家也来看一看吧.(zhuzhichao)

zhuzhichao 2002-01-30 10:03:24
加精
问题描述:
有表Table2,其结构及内容如下:
Table2:

id name1 name2 name3 ……(列有很多)
1 aa bb cc ……
2 ii jj kk ……
3 xx yy zz ……
…………………………………………

有表Table1,其结构如下:
Table1:
id variable

现在想把Table2中的除id以外的字段名(注意,是字段名)填入Table1中的id,
从Table2中提取某一行(先假设是id为1的那一行吧)中与每个字段名对应的内容填入Table1的variable.

以id为1的那行为例,就是要达到如下的效果:
Table1:
id variable
name1 aa
name2 bb
name3 cc
……………….


我的解决方案:

declare @vVariable varchar(2000),@var varchar(2000) --中間值的變量
declare @sql nvarchar(4000) -- 動態sql
declare @insertSql varchar(4000) -- 插入臨時表的sql
set @vVariable = ' '
if object_id('tempdb.dbo.#temp1') is not null
drop table #temp1
select identity(int) id,name into #temp1 from syscolumns where id = object_id('Table2') and name <> 'id' order by colid

if object_id('tempdb.dbo.#temp2') is null -- 創建臨時表#temp2
create table #temp2
(
id int identity,
variable varchar(10)
)
else
truncate table #temp2

select @vVariable = @vVariable + '+'',''+' + name from syscolumns where id =
object_id('Table2') and name <> 'id' order by colid
set @vVariable = right(@vVariable,len(@vVariable) - 6)
set @sql = 'select @var = '+@vVariable+' from Table2 where id = 1'
exec sp_executesql @sql,N'@var varchar(2000) output',@var output -- 組成以逗號分格的變量@var

set @insertSql='insert into #temp2 values('''+REPLACE(@var,',',''')
insert into #temp2 values(''')+''')'
exec (@insertSql) -- 根據變量中的逗號分格插入臨時表

insert into Table1(id,variable)
select name,variable from #temp1,#temp2
where #temp1.id = #temp2.id

select * from Table1
...全文
2069 59 打赏 收藏 转发到动态 举报
写回复
用AI写文章
59 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhu_2001 2002-02-06
  • 打赏
  • 举报
回复
如果是查找指定行,将:
Rs.Open "select * from table2",Conn,1,3
改成:
Rs.Open "select * from table2 where id="&ColNumber,Conn,1,3
'ColNumber为你要提取的行
liuhu_2001 2002-02-06
  • 打赏
  • 举报
回复
对于这个问题,大家用的存储过程方式有解决,我觉得都不错!但解决方法总是多样的,我喜欢用ADO+ASP解决,或者在VB中写一个DLL。请看我的思路:
Rs.Open "select * from table2",Conn,1,3
dim TempStr
for i=1 to Rs.RecordCount
if Rs.eof or Rs.bof then exit for
for j=1 to Rs.Fields.Count-1
TempStr=Rs.Fields(j)
'如table1中id是identity的话
Conn.Execute "insert table1(variable) values('"&TempStr&"')"
next
Rs.MoveNext
next
Conn.Close
Rs.Close
多简单,才十几行代码!
ferbruary 2002-02-06
  • 打赏
  • 举报
回复
收藏!
ltltlt 2002-02-05
  • 打赏
  • 举报
回复
to green_girl(无名的裘德):
set @insertSql='insert into #temp2 values('''+REPLACE(@var,',',''')
insert into #temp2 values(''')+''')'
好象是两句,实际只有一句,因为'最后才闭合.
set @insertSql='insert into #temp2 values('''+REPLACE(@var,',',''')
后有一回车,目的为了产生一连串的insert into语句
易杰ERP 2002-02-05
  • 打赏
  • 举报
回复
关注
zhuzhichao 2002-02-05
  • 打赏
  • 举报
回复
再置頂兩天後結貼.
N_chow 2002-02-05
  • 打赏
  • 举报
回复
study
amsea 2002-02-05
  • 打赏
  • 举报
回复
开始是简体汉字,后来变成是繁体?
不明白,思考中……
zlps 2002-02-05
  • 打赏
  • 举报
回复
学习。
这种技巧对应的实际应用是什么?不会是玩文字游戏吧?
man_zhou_sf 2002-02-05
  • 打赏
  • 举报
回复
这种的答案也正是我需要,呵呵。
谢谢你!zhuzhichao(炎龙骑士团—索尔—破龙击)
goldenfinger413 2002-02-05
  • 打赏
  • 举报
回复
ok 崇拜你!!!!!!!!
panther_totem 2002-02-05
  • 打赏
  • 举报
回复
看看,好好看看。
jsidiot 2002-02-04
  • 打赏
  • 举报
回复
我一点也看不懂
不过还是收藏一下
呵呵
Brad 2002-02-04
  • 打赏
  • 举报
回复
不知道执行过没有,反正我无法执行
第一,
select @vVariable = @vVariable + '+'',''+' + name from syscolumns where id =
object_id('Table2') and name <> 'id' order by colid
好象是以+,+分隔的,并不是,

另外,set @sql = 'select @var = '+@vVariable+' from Table2 where id = 1'
这句SQL好象返回的是
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.





green_girl 2002-02-04
  • 打赏
  • 举报
回复
set @insertSql='insert into #temp2 values('''+REPLACE(@var,',',''')
insert into #temp2 values(''')+''')'

这句 什么 意思?
supsuccess 2002-02-03
  • 打赏
  • 举报
回复
xuexi !
zlb2000 2002-02-03
  • 打赏
  • 举报
回复
介绍给大家一个好东东: http://www27.brinkster.com/zlb1978

科旭即时通是一个优秀的即时通讯软件,该软件采用分布式结构,包括服务器和客户端两部分,适用于局域网,广域网,和WWW三种网络体系,用户可以自主设置服务器和通讯端口,可方便迅速地在单位内部建立起多个独立的聊天体系。


conanbos 2002-02-03
  • 打赏
  • 举报
回复
没想到竹大哥给我回答的一个问题能让这么多人引起共鸣,哈哈。
halfdream 2002-02-03
  • 打赏
  • 举报
回复
有种转置矩阵表的技巧,在数据库上很有用..
可以不用这些存贮过程............
....可有人感兴趣吗?



xiezq_136 2002-02-02
  • 打赏
  • 举报
回复
不太懂,先研究研究
加载更多回复(39)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧