使用SQL Server表查询Excel文件中的数据

使用SQL Server表查询Excel文件中的数据,sql,sql-server-2012,Sql,Sql Server 2012,我正试图做一个报告的订单号已被退款,我有一个列表,他们在Excel中,但我想知道更多的订单,如金额,退款的原因等。所有这些信息都存储在SQL Server表中 一个接一个的工作很辛苦,有没有办法让我一次检查一下?现在我使用where子句,但是一个接一个地检查需要很长时间 请帮忙 鉴于您没有提供任何数据模型等,我在这里做了一些假设。一种方法是创建一个临时表,填充它,然后将其连接到要查询的表中 第一步是创建临时表,如下所示: CREATE TABLE #temp (order_number INT)

我正试图做一个报告的订单号已被退款,我有一个列表,他们在Excel中,但我想知道更多的订单,如金额,退款的原因等。所有这些信息都存储在SQL Server表中

一个接一个的工作很辛苦,有没有办法让我一次检查一下?现在我使用where子句,但是一个接一个地检查需要很长时间


请帮忙

鉴于您没有提供任何数据模型等,我在这里做了一些假设。一种方法是创建一个临时表,填充它,然后将其连接到要查询的表中

第一步是创建临时表,如下所示:

CREATE TABLE #temp (order_number INT);
(假设每个订单号都有一个唯一的id。)

然后,您需要填充此表,如何填充此表在很大程度上取决于Excel工作簿中有多少订单号。您可以编写SSIS包(但这意味着首先要实现临时表)、使用导出向导等

一个简单的方法是将Excel公式写入列表中每一行的新列中,然后将其复制到底部,复制并粘贴到SSMS中,然后执行生成的脚本。你可能会得到这样的公式:

CONCATENATE("INSERT INTO #temp SELECT ", A1, ";")
一旦将数据放入临时表,甚至物理表中,您就可以进行查询并将其加入其中,例如:

SELECT o.* FROM MyOrders o INNER JOIN #temp t ON t.order_number = o.order_number;
SELECT r.* FROM MyRefunds r INNER JOIN #temp t ON t.order_number = r.order_number;

那么您想要一份所有已退款订单的列表并将其导出到excel?你能给我们提供更多的信息吗?例如,您的数据库表是什么样子。我想您希望将Excel表导入SQL表,并查询它与现有SQL orders表的关联,对吗?您好,我在Excel[订单号]中只有一列,在SQL-退款订单表中有[订单号]、[金额]、[原因]、[国家]、[日期]。我不需要sql中的所有订单号,我想匹配excel中的订单号。没关系。仍然有效。嗨,我已经创建了#temp文件夹,现在如何将数据导入#temp?正如我在回答中所说,有多种方法可以做到这一点。最简单的方法是使用Excel公式手动创建脚本。另一种方法是这样做:我已经尝试过了,但这是错误消息-无法解决equal to操作中“Latin1_General_CI_AS”和“Latin1_General_100_CI_AS”之间的排序冲突。add“COLLATE DATABASE\默认情况下,在连接条件之后,您需要对使用不同排序规则的任何字符类型连接执行此操作。或者,您可以通过在temp表中强制执行正确的排序规则来解决这个问题。所以,如果您有“ON t.x=o.x;”,您会将其更改为“ON t.x=o.x COLLATE DATABASE_DEFAULT;”。