有點難倒在這一個。有人與我一起工作,在SQL Server的Excel數據連接查詢中遇到一些麻煩。當他將SQL查詢從硬編碼日期過濾器更改爲使用參數和單元格值時,他收到錯誤(無法將字符串轉換爲smalldatetime)。值得注意的是,查詢有多個子查詢。我做了一些研究,發現如下:Excel到SQL Server數據連接參數發送錯誤的數據類型
1)在原始查詢的NetMon捕獲中,將一個硬編碼日期更改爲參數引用,Excel將參數數據類型作爲varchar(50)發送。
2)當我更改查詢以將所有日期更改爲參數引用時,只有最後一個參數以varchar(50)的形式發送,其餘發送爲smalldatetime(與表的數據類型匹配)。
3)當我更改查詢以刪除子查詢但沒有其他的時,查詢將正確返回並且Excel發送正確的數據類型。在這種情況下,只有一個參數。
4)當我將查詢轉儲到存儲過程並從同一個Excel數據連接中調用該查詢時,這些參數都可以正常工作。
我嘗試過移動單元格,以便我可以看到它是否是JET-like problem of Excel checking the top 8 rows of data to determine datatype - 而不是問題。
爲什麼會發生這種情況?正如我提到的 - 難倒。
的代碼基本上是這樣的:
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
子句是一個給我的悲傷
我無法回答你的問題「爲什麼會發生這種情況」。但我猜測一個解決方案可能是編寫一個函數,它接收單元格引用作爲參數並構建一個總體查詢字符串,並將該結果字符串用作查詢,而不是將引用的值作爲參數傳遞給連接。 –
是的,這可能最終成爲最佳解決方案。這是不理想的,因爲所有的最終用戶可能不會很好地理解要使用哪種數據類型,但對於這個特定的用戶來說,它是可行的。我認爲這對我從中獲得的收益過於參與,但最終它可能會奏效。謝謝! –