2012-08-10 39 views
1

您好我有一個查詢不能在Excel外部SQL Server查詢中以圖形方式表示,因爲查詢並不簡單,我無法設置Excel變量。相反,我嘗試使用declare/set在SQL中設置變量,但是當嘗試導入數據時會失敗。SQL變量不能在Excel中工作查詢

有沒有辦法解決這個問題?我需要一定的靈活性來運行查詢並將數據傳輸到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 - 提供者= SQLNCLI。這允許我在Excel VBA中構建更復雜的查詢。 – 2012-08-10 16:05:47

+0

「顯示一些代碼」是最後一條評論應該說的內容。 – 2012-08-10 16:32:34

回答

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 

您還可以使用查詢表。

3

another question在這個問題上具有正確answer:在您的查詢

使用SET NOCCOUNT ON

當我嘗試從Excel運行SP時,遇到了與OP相同的問題,該應用程序應該從嵌入的SELECT返回數據。這是由...行受影響消息從服務器返回。顯然,Excel無法正確處理此消息,並且返回的數據將被忽略。一旦我在我的SP中使用SET NOCOUNT ON,數據在Excel中正確顯示。

4

使用聲明在Excel中值,你需要設置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 
+0

爲我工作! TKS – Sergio 2015-11-26 13:55:09