SQL变量在Excel查询中不起作用

时间:2012-08-10 15:56:11

标签: sql excel

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

有没有办法解决这个问题?我需要一定程度的灵活性来运行查询并将数据传输到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 个答案:

答案 0 :(得分:5)

在Excel中使用声明值时,需要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

答案 1 :(得分:4)

此主题another question有正确的answer

在查询中使用设置NOCCOUNT

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

答案 2 :(得分: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

您也可以使用查询表。