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を使用します。

SP を Excel から実行しようとしたときに、OP と同じ問題が発生しましたSELECT。サーバーから返された... 行の影響を受けたメッセージが原因でした。どうやら、Excel はこのメッセージを正しく処理できず、返されたデータは無視されます。SPで使用SET NOCOUNT ONしたら、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 に答える