【发布时间】:2013-01-04 13:25:48
【问题描述】:
我们有一个包含 10,000 个客户 ID 列表的电子表格。
我们还有一个 SQL Server 2008R2 数据库,它有一个客户表,包含 20,000,000 个客户,并包括客户 ID、名字、电子邮件等属性。
最好在 Excel 中,我想查询数据库并在我的电子表格中获取 10,000 个客户的名字和电子邮件。
我不想从数据库中取回所有 20,000,000 条记录,然后筛选出 10,000 名客户,因为这对数据库来说过于繁重(返回 20,000,000 行)。
我试图找到一种在数据库查询中应用过滤谓词的方法来执行以下操作:
SELECT first_name, email
FROM customers
WHERE customer_id IN (
SELECT customer_id FROM [Excel Spreadsheet]
)
我不能在查询中使用WHERE CUSTOMER_ID IN ( <comma seperated list of customer_ids> ),因为有 10,000 个客户 ID(整数),而且单个 SQL 语句中的字符数似乎有限制。
我有 PowerPivot,但如果不先带回 20 家工厂客户,就找不到办法。
我不想使用 VBA - 该解决方案需要对非技术最终用户可行。
有什么工具可以做到这一点吗?
【问题讨论】:
-
它看起来很旧,但这里是a howto for setting up an ODBC connection from Excel to a SQL Server database。然后,您可以根据需要从 Excel 中查询。
-
谢谢,我可以从 Excel 连接到数据库没问题。问题在于构建数据库查询以使用现有电子表格中的值作为过滤器。
-
您能否将 Excel 客户 ID 上传到数据库中的临时表,然后在客户表上构建查询,并在该临时表上进行内部连接?您可以使用 VBA/ADO 自动上传 - 并为非技术用户提供一个按钮来触发上传或整体更新...
-
这可行,但远非理想...也许 Excel 不是适合这项工作的工具。我发现在 MS Access 中可以做到这一点,您可以在其中创建一个指向 Excel 电子表格的链接表,以及一个指向 SQL Server DB 表的链接表,然后您可以在查询中加入这两者。尽管从运行数据库跟踪来看,它看起来仍然将整个数据库表拉到客户端,然后将其与客户端的电子表格合并。
标签: sql sql-server excel business-intelligence