将 SQL 代码从 Excel 导出到 SQL
Posted
技术标签:
【中文标题】将 SQL 代码从 Excel 导出到 SQL【英文标题】:Export SQL code from Excel into SQL 【发布时间】:2015-03-09 15:52:21 【问题描述】:我的技能水平:VBA 的基本用户,对 SQL 几乎一无所知(尽管我最近学会了如何执行代码等)。
我在 Excel 工作表中创建了一个用户界面,以允许用户输入报告变量(日期等)。这些传递到第二个 Excel 工作表,通过使用各种 Excel 语句,创建必要的 SQL 代码。然后,我的宏复制此工作表并通过 shell 命令打开 Microsoft SQL Server 2008 Rx。目前,我在生成的 Microsoft SQL Server 2008 R2 连接到服务器窗口上手动单击“连接”(不需要密码,只需要我单击“连接”),我创建一个新查询,我粘贴代码,然后在 SQL 中执行。因此,我试图通过 VBA 自动执行这些后面的步骤(打开 SQL,单击“连接”,复制/粘贴代码,执行)。
为了提供更多上下文,一旦 SQL 代码运行,我就有第二个宏,它使用 Excel 数据连接向导将生成的 SQL 数据带回我的工作表中。这很好用。
我已经在各种板上研究了几天。似乎没有人注意到我在 Excel 中创建代码的方法(可能是因为它是一种不雅的方法)。或者帖子的回复超出了我的理解水平。但我确实担心我在问一个之前已经回答过的问题(提前道歉)。
感谢您提供的任何建议/时间。
我正在使用: Excel/Office 2010 Microsoft SQL Server2008 R2(这与 Microsoft SQL Server Management Studios 相同吗?我的 SQL 应用程序显示两个名称) Microsoft ActiveX 数据对象 6.1 库(目前未选中。我看到的一篇文章提到了对此的需求。我也有多个以前的 AciveX 库版本可用。)
【问题讨论】:
您可以连接到 SQL 并从 VBA 执行查询。无需打开 Mangement Studio。 感谢大家的意见。 Paqogomez:我使用 Excel 的意图是 A) 允许最终用户输入界面(我的最终用户不精通 SQL,并且无法可靠地通过更改参数来更新 SQL 代码)和 B) 以允许结束数据导入 Excel 后用户报表自定义。 SQL Server 是否有解决这些问题的方法? Vojtech Dohnal:谢谢。你能给我一些关于如何做到这一点的见解吗? 如果您的 SQL 代码很复杂,那么您应该考虑使用 SQL 存储过程或表值函数等,然后从您的 VBA 中调用它。您也可以将其作为字符串文字粘贴到 VBA 中。我看不出从文本文件中读取它有什么好处,技术上可行但过于复杂。 如果您需要您的消息出现在某人的 SO 收件箱中,您应该这样写:@Kal10 【参考方案1】:您所做的非常巧妙,但可能没有必要。 Excel 具有许多用于导入外部数据的功能。
我会查看 Excel 中的 Data
选项卡和功能区的 From Other Sources
部分。您至少有三个选项:From SQL Server
、From Data Connection Wizard
和 From Microsoft Query
选项。
所有这些都将建立与数据库服务器的连接并对其执行 SQL。它们以不同的方式将数据返回到您的电子表格。
VBA 将再次发挥作用的地方在于自动生成和参数化这些将执行的查询。
但我会设置一些可行的东西,首先为您的参数值设置常量,以便您了解可能性,然后阅读和研究使用 VBA 动态设置您的 SQL。
顺便说一句,你也可以调查PowerPivot
。
【讨论】:
谢谢 Ann L。这些 Excel 数据选项卡选项似乎都引用了 IMPORTING to Excel,这确实是我用来导入 SQL 数据的方法。但听起来你说他们也可以执行 SQL 查询?如果是这样,这是如何发生的?用户在哪里输入他们的变量? Microsoft Query Wizard 似乎涉及到这一点,但对于外行来说,它似乎不太友好(就最终用户使用该系统生成报告而言)。 @Kal10 可以在 Microsoft Query 工具中设置参数和提示,以便在运行时提示用户输入值。当用户单击刷新查询按钮时,查询执行,提示用户,然后返回所有记录。也可以以编程方式生成 SQL 并使用 VBA 将其分配给适当的属性,以便执行的查询是您以编程方式创建的查询。我手头没有任何代码可以做到这一点,但我可以四处寻找示例。以上是关于将 SQL 代码从 Excel 导出到 SQL的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:将结果数据从 SQL 查询导出到 Excel/CSV