これには少し困惑しました。私が一緒に働いている人が、SQL Server への Excel データ接続クエリのパラメーターで問題を抱えています。ハードコーディングされた日付フィルターからパラメーターとセル値を使用するように SQL クエリを変更すると、エラーが発生します (文字列を smalldatetime に変換できません)。クエリには複数のサブクエリがあることに注意してください。少し調べてみたところ、以下のことがわかりました。
1) 1 つのハードコーディングされた日付がパラメーター参照に変更された元のクエリの NetMon キャプチャで、Excel はパラメーター データ型を varchar(50) として送信しています。
2) すべての日付をパラメーター参照に変更するようにクエリを変更すると、最後のパラメーターのみが varchar(50) として送信され、残りは smalldatetime (テーブルのデータ型と一致) として送信されます。
3) クエリを変更してサブクエリだけを削除すると、クエリは正しく返され、Excel は正しいデータ型を送信します。この場合、パラメータは 1 つだけです。
4) ストアド プロシージャにクエリをダンプし、同じ Excel データ接続からそれを呼び出すと、すべてのパラメーターが正しく機能します。
セルを移動してみました。これは、Excel がデータの上位 8 行をチェックしてデータ型を決定するという JET のような問題であるかどうかを確認できるためです。問題ではありません。
なぜこれが起こるのでしょうか?私が述べたように - 困惑。
コードは基本的に次のようになります。
SELECT Name
, Sum(Sales) AS Sales
, (SELECT SUM(Cost) FROM Costcenter where Date > ? AND Date <= ?) As Costs
FROM SalesTable
Where Date = ?
Group by name
Order by name
そして最後?
の(WHERE
句の中では、私に悲しみを与えるものです.