如何用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语句应该怎么写?多谢指教!!! 展开
A表(df_fltj):
字段不确定,需要动态创建;
B表(bm_base):
只有一个字段(dm),存了10条记录,记录如下:
Field0
Field1
Field2
...
Field9
A表的结构(列)由B表的记录(行)创建,结果A表的结构是
Field0 Field1 Field2...Field9
B表的行能修改,可能会只有5行,也可能有20行,因此A表的列数也得随之变化;
SQL语句应该怎么写?多谢指教!!! 展开
1个回答
展开全部
--看你问了很久了没人回答,我就花点时间帮你一下了
--首先,我认为,你的思路有问题,虽然问题能解决,但这并不个合理的解决方案
--如果不是实在没办法,你就别这样用.
--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
--首先,我认为,你的思路有问题,虽然问题能解决,但这并不个合理的解决方案
--如果不是实在没办法,你就别这样用.
--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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询