在两个表中插入选择表SQL Server的结果
如何将select语句的结果插入到两个表中 我有一个包含多个数据的表:在两个表中插入选择表SQL Server的结果,sql,sql-server-2008,Sql,Sql Server 2008,如何将select语句的结果插入到两个表中 我有一个包含多个数据的表: val1 val2 val3 .... valn ------------------------- 12 21 54 78 .. .. .. .. 我有点像: 从tablename中选择t1.val1、t1.val2、t2.val3、t2.val4到table1 t1、table2 t2。 所以我想把val1,val2插入到一个新表中,该表有两个字段,如: tabble1:
val1 val2 val3 .... valn
-------------------------
12 21 54 78
.. .. .. ..
我有点像:
从tablename中选择t1.val1、t1.val2、t2.val3、t2.val4到table1 t1、table2 t2。
所以我想把val1,val2插入到一个新表中,该表有两个字段,如:
tabble1:
id fieldvalue
1 val1
2 val2
val3和val4也是如此。这是怎么做到的
tabble2:
id fieldvalue
1 val3
2 val4
这是可能的吗?不能有一个insert语句从一列创建两行,并且值来自不同的列 假设id字段是一个自动递增的列,只需为每列创建一条insert语句即可
insert into table1 (fieldname)
select val1 from tableName
insert into table1 (fieldname)
select val2 from tableName
insert into table1 (fieldname)
select val3 from tableName
insert into table1 (fieldname)
select val4 from tableName
诚然,很难理解你想要完成什么。如marc_所述,如果您实际上试图将行插入到两个不同的表中,则必须使用两个insert语句 但是,从您的示例判断,您可能不会尝试插入到两个表中,而是使用两个表插入到第三个表中,在第三个表中转置数据。如果是这种情况,则可以在一条语句中执行:
Insert MysteryTable( Id, fieldvalue )
Select 1, val1
From Table1
Union All
Select 2, val2
From Table1
Union All
Select 3, val3
From Table2 --assuming these come from Table2. Isn't clear in the OP
Union All
Select 4, val4
From Table2 --assuming these come from Table2. Isn't clear in the OP
当然,如果Table1或Table2有许多行,那么很明显,您将在MysteryTable中获得许多具有相同Id值的行
根据OP的更改进行更新
根据您的澄清,您所寻求的是可以完成的,但需要两个类似于上面一个的查询
Insert Table1( Id, fieldvalue )
Select 1, val1
From SourceTable
Union All
Select 2, val2
From SourceTable
Insert Table2( Id, fieldvalue )
Select 1, val3
From SourceTable
Union All
Select 2, val4
From SourceTable
生成id值的另一个变体是:
With NumberedItems As
(
Select val1 As val
From SourceTable
Union All
Select val2
From SourceTable
)
Insert Table1(id, fieldname)
Select Row_Number() Over( Order By val ) As Num
, val
From SourceTable
With NumberedItems As
(
Select val3 As val
From SourceTable
Union All
Select val4
From SourceTable
)
Insert Table2(id, fieldname)
Select Row_Number() Over( Order By val ) As Num
, val
From SourceTable
顺便说一句,在上面的示例中,我使用了
Union All
,但是如果您试图规范化数据,您可能希望使用不同的值。在这种情况下,您将使用Union
而不是Union All
这些不是您所称的update语句,而是INSERT语句。在这种情况下,您可以很好地将插入到表1(field1,field2,field3,field4)中,从其他表中选择val1,val2,val3,val4
…哦,是的,我是指插入。我想他想让“fieldname”一栏填满所有四栏的内容,这就是为什么你需要四条insert语句的原因。。您不能使用alias在两个不同的表中插入从问题中的表中选择的结果?对吗?它不能-不能在单个SQL语句中。INSERT
总是放在一个表中-如果你需要填写两个表,你需要两条语句。你是想规范化一个现有的表吗?不是真的,只是拆分它们的一些属性excuse me@Thomas,当我有多个列值,比如,val1,val2,val3,val4….valn我知道动态sql可以使用,但是如何使用?您的两个解决方案中,哪一个更容易为动态sql实现?@darkcminor-因为您是在中间层组件中实现的(对吧?),这真是一个推动。第二种解决方案的优点是,它会自动为您创建序列号,前提是您需要序列号。