2

您好我有一个无法在 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 中运行,显然我的查询更复杂,但变量的使用是必不可少的,我正在寻找一种方法来完成这项工作。

谢谢

4

3 回答 3

6

在 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
于 2015-03-06T19:53:55.227 回答
4

关于这个主题还有另一个问题有正确答案

在查询中使用SET NOCCOUNT ON

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

于 2014-09-09T11:11:53.733 回答
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

您还可以使用查询表。

于 2012-08-20T19:10:52.133 回答