Я пытаюсь написать макрос для запроса из нашей базы данных, используя предложение IN
, за исключением одной проблемы. Я достигаю предела в предложении IN
для SQL Server.Работать с ограничением предложения 'IN'
Мой макрос выглядит следующим образом:
Dim row_count As Double
row_count = ActiveSheet.UsedRange.Rows.Count - 1
half_row_count = row_count
Dim i As Double
Dim products As String
For i = 2 To half_row_count
Dim product_id As String
product_id = Cells(i, 1).Value
'test = sixtyDays(product_id, conn)
'Cells(i, 10).Value = test
products = products & "'" & product_id & "'" & ", "
Next i
Dim sample As New ADODB.Recordset
products = Left(products, Len(products) - 2)
Set sample = sixtyDays(products, conn)
Sheets(1).Range("K2").CopyFromRecordset sample
conn.Close
Function sixtyDays(ProductID As String, new_conn As ADODB.Connection) As ADODB.Recordset
Dim sConnString As String
Dim rst As New ADODB.Recordset
Dim recordsAffecfted As Long
StrQuery = "SELECT ProductAnalysisByMonth.SalesQty FROM ProductAnalysisByMonth WHERE ProductAnalysisByMonth.ProductID IN (" + ProductID + ") AND ProductAnalysisByMonth.Month = " + CStr(Month(Date) - 2)
rst.Open StrQuery, new_conn
Set sixtyDays = rst
End Function
Так что мне нужно, как некоторые разбить запрос на более мелкие куски, за исключением того, число аргументов, передаваемых в запросе SQL будет меняться от недели к неделе.
Каков наиболее эффективный способ решения этой проблемы?
Я не испытал это лично, но я бы проверить здесь: http://stackoverflow.com/q/1069415/1316573 –
Может вы просто 'union' два (или более) запросов, каждый из которых остается ниже предела для предложения 'IN' в SQL Server. (предел в Oracle - 1000, я не уверен, что это такое для SQL Server) – Marc
Не можете ли вы просто написать его как два отдельных предложения IN с помощью OR? EG: WHERE (item in ('A', 'B', ....) OR item in ('X', 'Y', ....)) AND ... –