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