SQL变量在Excel查询中无法使用

3

你好,我有一个查询无法在Excel外部SQL Server查询中以图形方式表示,因为查询不简单,我不能设置Excel变量。相反,我尝试在SQL中使用declare/set设置变量,但是在导入数据时失败。

有没有办法解决这个问题?我需要一定的灵活性来运行查询并将数据传输到Excel中。

好的,以下是要求的示例。

declare @enddate as datetime
set @enddate = (select max(rpt_week) from [results].dbo.t_Data)
Select * from results.dbo.t_Data
where rpt_week = @enddate

很显然,这段代码无法在Excel上运行。虽然我的查询语句更加复杂,但使用变量是必不可少的,并且我正在寻找一种让它正常工作的方法。

谢谢。


3
我认为你需要写一些代码。虽然我不太理解你的问题,但或许将提供程序设置为本机SQL——Provider=SQLNCLI可以帮助你在Excel VBA中构建更复杂的查询。 - Doug Glancy
"展示一些代码" 是最后一个评论应该说的。 - Doug Glancy
3个回答

7
使用Excel中的declare values时,您需要设置SET NOCOUNT ON。
您的示例将如下所示:
SET NOCOUNT ON;
declare @enddate as datetime
set @enddate = (select max(rpt_week) from [results].dbo.t_Data)
Select * from results.dbo.t_Data
where rpt_week = @enddate

4
以下是您需要翻译的内容:

关于这个问题,另外一个问题有一个正确的答案

在您的查询中使用SET NOCCOUNT ON

当我尝试从Excel运行SP并返回嵌入式SELECT中的数据时,我遇到了与OP相同的问题。这是由服务器返回的...行(s) affected消息引起的。显然,Excel无法正确处理此消息,并忽略了返回的数据。一旦我在我的SP中使用了SET NOCOUNT ON,数据就可以在Excel中正确显示。


0
我不太确定你想要什么,但是这里有一些笔记:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command

cn.Open ServerCon ''Connection string

''Straight sql
sSQL = "SELECT * FROM table_1 WHERE adate = (SELECT Max(adate) FROM table_1)"
rs.Open sSQL, cn

''Not a good idea, see procedure parameter below for a better way
sSQL = "SELECT * FROM table_1 WHERE adate = '" _
     & Sheets("Sheet7").Range("B2") & "'"
rs.Open sSQL, cn

''Stored procedure
rs.Open "ExcelTest", cn

''Stored procedure with parameter
cmd.ActiveConnection = cn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "ExcelTest"
cmd.Parameters("@enddate") = Sheets("Sheet7").Range("B2")
Set rs = cmd.Execute

''Write to Excel
ActiveWorkbook.Sheets("Sheet12").Cells(1, 1).CopyFromRecordset rs

你还可以使用查询表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接