解决“IN”子句限制

我想写一个macros来查询从我们的数据库使用IN子句,除了一个问题。 我正在达到SQL Server的IN子句的限制。

我的macros看起来像这样:

 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查询的参数数量每周都会有所不同。

处理这个问题最有效的方法是什么?

创build一个表函数,它将把string结果返回到一个数据集中,该数据集可以被插入到CTE,临时表中,或者直接在连接中使用。 这是我解决这个限制的最有效的方法。 下面是Ole Michelsen网站的链接,他提供了一个简单而灵活的解决scheme。

链接: http : //ole.michelsen.dk/blog/split-string-to-table-using-transact-sql.html