我正在尝试提出一个插入 sql 语句,它将数据从一个表插入到另一个现有表中。实际上有一些方法可以做到这一点,但我没有找到符合我要求的方法。
我需要一个插入语句类型的查询,它将数据插入另一个表,但它不知道两个表都有哪些标题。例如,源表有 25 个标题,目标表有 20 个,其中 10 个在名称上匹配。我想转移与标题名称匹配的那些忽略其余部分。
希望我很清楚,希望有人能帮助我
我正在尝试提出一个插入 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')
然后创建插入语句
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 并执行它。我猜这应该可以解决您的目的。