如何用SQL动态创建表的字段

现在我有两个表,A与B表,A表的还没创建,希望从B表中查询到dm这个字段的所有记录来创建A表,请问这个可以吗?A表(df_fltj):字段不确定,需要动态创建;B表(bm... 现在我有两个表,A与B表,A表的还没创建,希望从B表中查询到dm这个字段的所有记录来创建A表,请问这个可以吗?
A表(df_fltj):
字段不确定,需要动态创建;

B表(bm_base):
只有一个字段(dm),存了10条记录,记录如下:
Field0
Field1
Field2
...
Field9

A表的结构(列)由B表的记录(行)创建,结果A表的结构是
Field0 Field1 Field2...Field9

B表的行能修改,可能会只有5行,也可能有20行,因此A表的列数也得随之变化;

SQL语句应该怎么写?多谢指教!!!
展开
 我来答
chenxfsoft
2009-03-05 · TA获得超过1380个赞
知道大有可为答主
回答量:2418
采纳率:0%
帮助的人:1848万
展开全部
--看你问了很久了没人回答,我就花点时间帮你一下了
--首先,我认为,你的思路有问题,虽然问题能解决,但这并不个合理的解决方案
--如果不是实在没办法,你就别这样用.
--SQL如下,你到查询分析器里去运行了下试试吧
if exists (select * from dbo.sysobjects where id = object_id(N'[df_fltj]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [df_fltj]

set nocount on

declare @cur cursor

set @cur = cursor for
select dm,tp from bm_base --where ...
--你的 bm_base 最好能建2个字段,dm,tp,
--dm 为字段名称,tp 为类型和其他,如果要再细分,还可以加可否为NULL,以及其他
--如,dm: WorkID ,tp: nvarchar (50) not null
--如果你用一个字段dm的话,dm就必须如此模式 WorkID nvarchar(50) not null
--你自己看着办吧
declare @fname nvarchar(255),@type nvarchar(255),@sql nvarchar(2000)
declare @i int
open @cur

set @i =0
set @sql ='CREATE TABLE [df_fltj] ('

FETCH NEXT FROM @cur INTO @fname,@type
WHILE @@FETCH_STATUS = 0
BEGIN

if @i >0
set @sql = @sql +','

set @sql = @sql + @fname + ' ' +@type + ','

set @i =@i+1

FETCH NEXT FROM @cur INTO @fname,@type
end

set @sql = @sql +')'

declare @rtn nvarchar(50)

if @i=0
set @rtn = 'B表未找到合适记录,无法建表!'
else
begin
if exec sp_executesql( N@sql) =0
set @rtn='已经建表'
else
set @rtn ='出错了'
end
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式