SQL Server 2008 - 根据另一个表中的字段规范创建表

时间:2016-06-15 15:14:04

标签: sql-server sql-server-2008

我有一个源表,其中包含用于创建如下所示的表的数据:

margin-top

如果源表中的FIELD_TYPE是TEXT,那么我想在我的新目标表中创建一个字段为VARCHAR(FIELD_SIZE)。

如果源表中的FIELD TYPE是NUMERIC,那么我想在新目标表中创建一个字段,如NUMERIC(20,6)或DECIMAL(20,6)

我的新目标表看起来像这样(并且具有上述数据类型):

FIELD_POSITION   FIELD_NAME    FIELD_TYPE    FIELD_SIZE
-----------------------------------------------------------
1                FIELD1        TEXT          25
2                FIELD2        NUMERIC       0
3                FIELD3        TEXT          50
4                FIELD4        TEXT          15
5                FIELD5        NUMERIC       0
etc...

有没有办法让我查询我的源表并构造一个CREATE TABLE语句来完成这个?

我是SQL Server新手,并且使用我可以访问的SQL Server 2008 Express副本学习了不同的技术。

谢谢。

1 个答案:

答案 0 :(得分:0)

使用一些动态sql是可能的。

Declare @Table table (Field_Postion int,Field_Name varchar(50),Field_Type varchar(50),Field_Size int)
Insert Into @Table values
(1,'FIELD1','TEXT',25),
(2,'FIELD2','NUMERIC',0),
(3,'FIELD3','TEXT',50),
(4,'FIELD4','TEXT',15),
(5,'FIELD5','NUMERIC',0)

Declare @NewTableName varchar(50) = '[dbo].[SomeTableName]',@SQL varchar(max)

Select @SQL =coalesce(@SQL,'zzz') + +',['+Field_Name+'] '+case when Field_Type ='TEXT' then 'varchar('+cast(Field_Size as varchar(25)) +') ' else 'numeric(18, '+cast(Field_Size as varchar(25))+') ' end
 From @Table
 Order By Field_Postion

Select Replace(@SQL,'zzz,','Create Table '+@NewTableName+'(')+') ON [PRIMARY]'
--Exec(@SQL)

返回

Create Table [dbo].[SomeTableName]([FIELD1] varchar(25) ,[FIELD2] numeric(18, 0) ,[FIELD3] varchar(50) ,[FIELD4] varchar(15) ,[FIELD5] numeric(18, 0) ) ON [PRIMARY]

如果您对结果感到满意,可以从Exec()

中删除注释