1

我正在尝试提出一个插入 sql 语句,它将数据从一个表插入到另一个现有表中。实际上有一些方法可以做到这一点,但我没有找到符合我要求的方法。

我需要一个插入语句类型的查询,它将数据插入另一个表,但它不知道两个表都有哪些标题。例如,源表有 25 个标题,目标表有 20 个,其中 10 个在名称上匹配。我想转移与标题名称匹配的那些忽略其余部分。

希望我很清楚,希望有人能帮助我

4

2 回答 2

0

我认为您必须获取两个表列然后过滤 em 以获取匹配列名称,然后您可以构建您的insert into语句并执行它

获取两个表中都存在的列

Declare @cols varchar(max)

SELECT  @cols =COALESCE(@cols +',','')+'['+COLUMN_NAME+']'
FROM DbName.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'security' and COLUMN_NAME in( 
      SELECT COLUMN_NAME
      FROM DbName.INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = N'debt_securities')

然后创建插入语句

declare @query varchar(max)='insert into debt_securities('+@cols+')
                             select '+@cols+' from [security]'

然后执行它

exec(@query)
于 2011-07-27T12:40:58.637 回答
0

我想不出一个查询可以做到这一切,但你绝对可以编写一个 sql server 过程来做到这一点。

您可以从以下查询中获取源表和目标表的列名和列的数据类型列表

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'TABLENAME'

有了这个,您可以在 pl/sql 中运行一个循环,以根据名称和数据类型找出匹配的列,然后动态形成一个动态 plsql 并执行它。我猜这应该可以解决您的目的。

于 2011-07-27T12:48:29.980 回答