我试图提出一个插入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并执行它。我想这应该能解决你的问题。