I have a problem with Excel VBA recordset, it runs all other queries but this one particular query which runs in SQL Server does not open with the Recordset. Here is the code chunk:
SQL2 = "DECLARE @val VARCHAR (2000) " & vbCrLf & "DECLARE @cert VARCHAR(2000) " & vbCrLf & _
"DECLARE @inv VARCHAR(2000) " & vbCrLf & "DECLARE @loc INT " & vbCrLf & _
"DECLARE @res TABLE(val VARCHAR(100)) " & vbCrLf & _
"DECLARE @Delimiter VARCHAR(2) " & vbCrLf & "SET @val = '' " & vbCrLf & _
"SET @Delimiter = ',' " & vbCrLf & "SELECT @cert = " & vbCrLf & "CASE WHEN @cert = '' " & vbCrLf & _
"THEN CertInvsRec " & vbCrLf & "ELSE @cert + coalesce(',' + CertInvsRec, '') " & vbCrLf & _
"End " & vbCrLf & "FROM ProjValuations WHERE (Proj = 'TPL-15-020') " & vbCrLf & _
"SELECT @inv = " & vbCrLf & "CASE WHEN @inv = '' " & vbCrLf & "THEN InvsAmountRec " & vbCrLf & _
"ELSE @inv + coalesce(',' + InvsAmountRec, '') " & vbCrLf & "End " & vbCrLf & _
"FROM ProjValuations WHERE (Proj = 'TPL-15-020') " & vbCrLf & "SET @val = CONCAT(@inv, ',', @cert) " & vbCrLf & _
"IF NOT @val = ',' " & vbCrLf & "DECLARE @Index SMALLINT, @Start SMALLINT, @DelSize SMALLINT " & vbCrLf & _
"SET @DelSize = LEN(@Delimiter) " & vbCrLf & "WHILE LEN(@val) > 0 " & vbCrLf & "BEGIN " & vbCrLf & _
"SET @Index = CHARINDEX(@Delimiter, @val) " & vbCrLf & "IF @Index = 0 " & vbCrLf & "BEGIN " & vbCrLf & _
"INSERT INTO @res(val) VALUES(LTRIM(RTRIM(@val))) " & vbCrLf & "BREAK " & vbCrLf & _
"End " & vbCrLf & "Else " & vbCrLf & "BEGIN " & vbCrLf & _
"INSERT INTO @res (val) VALUES (LTRIM(RTRIM(SUBSTRING(@val, 1,@Index - 1)))) " & vbCrLf & _
"SET @Start = @Index + @DelSize " & vbCrLf & _
"SET @val = SUBSTRING(@val, @Start , LEN(@val) - @Start + 1) " & vbCrLf & "End " & vbCrLf & _
"End " & vbCrLf & vbCrLf & "SELECT " & vbCrLf & "( " & vbCrLf & _
"SELECT sum(InvTotExcl) FROM invnum WHERE autoindex in ( " & vbCrLf & _
"SELECT iInvoiceID FROM _bvSalesOrdersFull WHERE (ProjectCode LIKE '%020%') AND " & vbCrLf & _
"(StatusDescription = 'CERTIFICATE') and iInvoiceID not in (SELECT * FROM @res)) " & vbCrLf & _
") " & vbCrLf & " AS certAmnt, " & vbCrLf & "( " & vbCrLf & _
"SELECT SUM(InvTotExcl) FROM _bvSalesOrdersFull WHERE (ProjectCode = 'TPL-15-020') AND " & vbCrLf & _
"(StatusDescription = 'STANDARD') and iInvoiceID not in (SELECT * FROM @res) " & vbCrLf & ") AS invAmnt"
If rsAmnts.State = adStateOpen Then rsAmnts.Close
rsAmnts.Open SQL2, CN, adOpenStatic, adLockReadOnly
Any help would be highly appreciated, thanks in advance.
If it helps, If I use direct SELECT queries like e.g. SELECT * FROM things it runs, could be because of the variable declarations, so maybe should I move the query to a procedure?


debug.print SQL2in the immediate window and then run the query in SQL does it run ok?