我正在運行使用ACE OLEDB而不連接到Access的VBA中的SQL查詢。我這樣做,所以我可以快速粉碎一些Excel表格。我不想將這個轉換到另一個平臺,所以寧願解決當前的問題。VBA/ACE OLEDB/SQL運行時錯誤-2147217913標準表達式中的數據類型不匹配
VBA代碼工作沒有問題,衆多的查詢,但我跑進提到的錯誤以下查詢:
SELECT
bcr.DialCode,
bcr.Destination,
(
SELECT
TOP 1 cc.CountryCode
FROM
table2 AS cc
WHERE
bcr.DialCode LIKE cc.CountryCode+'%'
ORDER BY LEN(cc.CountryCode) DESC
) AS CountryCodes
FROM
table1 AS bcr
代碼改編自:Longest prefix match in SQL Server 2000
意圖是撥打的電話號碼匹配尋找最具包容性的比賽。重用輸入引用文本樣本和預期結果(適應這種運動):
bcr.DialCode = '0841234567'
cc.CountryCode = {'084',
'0841',
'08412'}
Expected output = {'0841234567','Destination 1','08412'}
從網上搜索看起來也許我在查詢中使用保留字。但我已經單獨測試了查詢的不同部分,並沒有得到任何錯誤。例如:
SELECT
bcr.DialCode,
bcr.Destination
FROM
table1 AS bcr
按預期工作。另外:
SELECT
TOP 1 cc.CountryCode
FROM
table2 AS cc
WHERE
cc.CountryCode LIKE '1'+'%'
ORDER BY LEN(cc.CountryCode) DESC
沒有錯誤並輸出預期結果。
用於將查詢傳遞給ADO連接的變量以String形式變暗,但我嘗試將設置設置爲Variant而不做任何更改。
在「最長前綴匹配」查詢不起作用的情況下,通過ACE實現SQL可能有區別嗎?任何指導將不勝感激。
子查詢'bcr.DialCode LIKE cc.CountryCode +'%''我認爲他們需要是另一種方式?並嘗試使用*作爲通配符。 –
ACE/OleDb數據庫引擎不知道[%]。您必須將其替換爲[*]。 –
感謝您的指示。查詢確實可以通過cc.CountryCode LIKE'1'+'%'(按照上面提供的第三個查詢)來工作。它輸出所有以'1'開始並且最大LEN爲4的國家代碼。我試着用'*'和'[*]'改變'%'的錯誤。嘗試用'[*]'修改''%''並得到「沒有給出一個或多個所需參數的值」。任何其他想法? – nbayly