Sql server 不使用单个列名的SQL联合

Sql server 不使用单个列名的SQL联合,sql-server,Sql Server,我想要两张桌子的并集。它们的列数都不相等,有些是相同的,有些不是 在不使用单独的列名的情况下,如何将它们合并在一起,在它们之间插入虚拟列 我必须查询并获取两个表的并集,并在不同的数据库上进行测试,这些数据库对同一个表有不同的列名。 因此,我不能使用寻址单个列名和插入伪列的常用方法来获得联合 谢谢, 戈库尔 如果不使用单独的列名,我将如何处理它们的联合 你不能 使用UNION时,列的数量和类型必须匹配。您可以通过检查两个或多个相关表的信息\u SCHEMA.columns来合成适当的SELECT…

我想要两张桌子的并集。它们的列数都不相等,有些是相同的,有些不是

在不使用单独的列名的情况下,如何将它们合并在一起,在它们之间插入虚拟列

我必须查询并获取两个表的并集,并在不同的数据库上进行测试,这些数据库对同一个表有不同的列名。 因此,我不能使用寻址单个列名和插入伪列的常用方法来获得联合

谢谢, 戈库尔

如果不使用单独的列名,我将如何处理它们的联合

你不能


使用UNION时,列的数量和类型必须匹配。

您可以通过检查两个或多个相关表的信息\u SCHEMA.columns来合成适当的SELECT…UNION…SELECT语句。有了这些列,您可以构建SQL,以便只包含公共列

使用T-SQL:

SELECT  COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   TABLE_NAME = 'FirstTable'
UNION
SELECT  COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   TABLE_NAME = 'SecondTable'
以C为例描述逻辑:

List<string> sharedColumnNames = CallTheAforementionedSql();
string unionStatement = string.Format(
  "SELECT [{0}] FROM FirstTable UNION SELECT [{0}] FROM SecondTable",
  string.Join("],[", shareColumnNames.ToArray())
);

var stuff = ExecuteSql(unionStatement);

如果表有不同的列,则必须指明这些列。为什么不同服务器上的数据库具有不同的名称?我突然想到,您有一个数据库设计问题,而不是查询问题。如果你不知道,你怎么知道你想要什么栏目;I don’我不知道这些专栏是什么?真是一部史诗般的失败。我想在不指定列的情况下进行分组。我的Skyrim炼金术技能几乎达到100级。也许我能帮上忙。我想你们对一个潜在的解决方案想得太多了。显然,你不能用一条SQL语句直接表达他想要什么。但一般来说,你可以做他想做的事情。我想做的是,不想插入伪列。但我不想逐一介绍每一个列名,因为事先不可能知道它。@user1489580-我没有更好的答案给你。作为HLGEM,您似乎有一个数据库设计问题。如果数据库共享一个模式,为什么列名和数字不同?“不可能提前知道”-如果不可能提前知道列,您将如何处理数据?但是如何匹配两个表中的列?你必须知道列名才能将它们匹配起来。我会让我的答案更明确…不标记为C。但是你仍然可以在过程中这样做,但这完全是浪费时间。如果两个表的列顺序都正确,那么这样做就行了。string.Join,,shareColumnNames.ToArray你想将列括在括号中[]