我有一个源表,其中包含用于创建如下所示的表的数据:
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副本学习了不同的技术。
谢谢。
答案 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()
中删除注释