插入语句,但假设您不知道源头和目标头



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

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

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

我认为你必须得到两个表列然后过滤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')

create insert statement

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

然后执行

exec(@query)

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

可以通过以下查询

获取源表和目标表的列名列表和列的数据类型
SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'TABLENAME'

你可以在pl/sql中运行一个循环,根据名称和数据类型找到匹配的列,然后形成一个动态的plsql并执行它。我想这应该能解决你的问题。

最新更新