动态生成表的问题---在线等

czhenq 2004-07-08 10:49:20
我要从table1中取出一些记录,然后收成一个新表,新表以刚才选出的记录中某列的值为列名
例:
table1:
ID value
1 a
2 b
3 c
4 d
…………
选出的记录为:
1 a
2 b
3 c
4 d
那新表的列为:
a b c d

不知道说清楚了没有

我是在存储过程中使用
...全文
269 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
czhenq 2004-07-08
  • 打赏
  • 举报
回复
toJohnShen(因果网):

字符串怎么生成???
只在sql中
JohnShen 2004-07-08
  • 打赏
  • 举报
回复
先产生创建表的字符串,然后用exec(字符串变量)完成创建工作
czhenq 2004-07-08
  • 打赏
  • 举报
回复
up
czhenq 2004-07-08
  • 打赏
  • 举报
回复
大小也可以统一
nvarchar(20)
czhenq 2004-07-08
  • 打赏
  • 举报
回复
值类型可以统一用一种 如nvarchar
zheninchangjiang 2004-07-08
  • 打赏
  • 举报
回复
明白,只是值的类型呢
outwindows 2004-07-08
  • 打赏
  • 举报
回复
楼上的方法不错...
zheninchangjiang 2004-07-08
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+[value]+' nvarchar(20),' from table1
set @sql=substring(@sql,1,len(@sql)-1)
exec('create table newtable('+@sql+')')
outwindows 2004-07-08
  • 打赏
  • 举报
回复
--比较简单的例子...
create proc proc_test1 @tb_name varchar(20)
as
declare @c1 varchar(10),
@c2 varchar(10),
@c3 varchar(10),
@c4 varchar(10),
@sql varchar(200)
select @c1=a,@c2=b,@c3=c,@c4=d
from 表
where ...
set @sql = 'create table ['+@tb_name+'](['+@c1+'] varchar(20),
['+@c2+'] varchar(20),
['+@c3+'] varchar(20),
['+@c4+'] varchar(20))'
exec(@sql)
newdongkui 2004-07-08
  • 打赏
  • 举报
回复
--咋没人答啊,我答
declare @_itemlist varchar(8000)

set @_itemlist = 'create table ['+@_yourtablename+'] (' + char(13)
select @_itemlist = @_itemlist + '['+yourselectitemname + '] nvarchar(20) ,'+ char(13)
from yourselecttable
select @_itemlist = left( @_itemlist , len(@_itemlist )-2) + char(13)+') ON [PRIMARY]'
exec( @_itemlist )
Hanson_bati_zhu 2004-07-08
  • 打赏
  • 举报
回复
比如:
DECLARE @ls_NewSQL varchar(4000)
DECLARE @ls_ColName varchar(100)
SELECT @ls_NewSQL = 'CREATE TABLE '
SELECT @ls_NewSQL = @ls_NewSQL + 新表的表名 + '( '

DECLARE C_Col CURSOR FOR
SELECT 列名 FROM 存列名信息的表
OPEN C_Col
FETCH C_Col INTO @ls_ColName
WHILE @@FETCH_STATUS
BEGIN
SELECT @ls_NewSQL = @ls_NewSQL + @ls_ColName + ' nvarchar(100),'
FETCH C_Col INTO @ls_ColName
END
CLOSE C_Col
DeAllocate C_Col
SELECT @ls_NewSQL = Left(@ls_NewSQL,Len(@ls_NewSQL) - 1)
SELECT @ls_NewSQL = @ls_NewSQL + ')'

EXECUTE(@ls_NewSQL)
Hanson_bati_zhu 2004-07-08
  • 打赏
  • 举报
回复
一般情况下,创建表的语句不过时:
CREATE TABLE (列名 列类型,。。。。)
如果需要主键、索引,则还需要其他的SQL语句

对于楼主所需要的功能,就可以在存储过程中,建立一个游标,循环获取要创建的表的各列列名,然后和表名一起根据CREATE TABLE语句的规则拼接成一个SQL,然后调用EXECUTE方法来执行这个SQL就可以了
创建主键、索引的方法与此类似的
czhenq 2004-07-08
  • 打赏
  • 举报
回复
怎么没人回答???

难道是不可能实现????
czhenq 2004-07-08
  • 打赏
  • 举报
回复
up

34,873

社区成员

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

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