Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:Insert into语句,但假设您不知道源标题和目标标题_Sql_Sql Server_Database_Insert_Database Table - Fatal编程技术网

SQL:Insert into语句,但假设您不知道源标题和目标标题

SQL:Insert into语句,但假设您不知道源标题和目标标题,sql,sql-server,database,insert,database-table,Sql,Sql Server,Database,Insert,Database Table,我正在尝试提出一个insert sql语句,它将数据从一个表插入到另一个现有表中。实际上有一些方法可以做到这一点,但我没有找到一种符合我要求的方法 我需要一个insert语句类型的查询,它将数据插入到另一个表中,但它不知道这两个表都有哪些标题。例如,源表有25个标题,目标表有20个标题,其中10个标题在名称上匹配。我想转移那些与标题名称匹配的内容,而忽略其余内容 希望我说得很清楚,希望任何人都能帮助我我想你必须先得到两个表的列,然后过滤它们以获得匹配的列名,然后才能将insert编译成语句并执行

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

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


希望我说得很清楚,希望任何人都能帮助我

我想你必须先得到两个表的列,然后过滤它们以获得匹配的列名,然后才能将insert编译成语句并执行它

两个表中都存在获取列的步骤

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')
然后创建insert语句

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并执行它。我想这应该可以解决您的目的。

我想您所说的“标题”是指“列”?我认为这是不可能的。您需要它作为查询,还是SSIS工作可以?是的,很抱歉,列。最好是查询必须处理哪些不匹配的数据类型?我认为pl/sql适用于oracle,不是吗?他用sql Server标记了这个问题是的,我的评论更倾向于oracle,我想在sql Server或任何其他数据库中应该是类似的否,所有的标签都是PL\sql函数,您不能在sql Server中使用它是的,您是对的。为sql server编辑了我的帖子。。我没看到标签。非常感谢你的回复。但由于某种原因,我不能工作。这两个表是:security origin和debt_securities target显然这是一个快速问题的快速答案,但最好使用QuoteName来处理包含空格等的列名@Tao感谢您的注意,我编辑了它,但我使用的是括号而不是引号。我会按照@tao的建议使用引号,否则您将无法处理有效的foo[]栏,将引号引到[foo[]栏]