Lparameters taArray, tcCommand, toCommand,tnOccurence EXTERNAL ARRAY taArray ** Create an in ( list ) Local lcCurType, ix, lcValueList, lcSplitterType lcCurType = UPPER(Type('taArray[1]')) DO case CASE m.lcCurType $ 'DT' lcSplitterType = 'd' CASE m.lcCurType $ 'IN' lcSplitterType = 'i' otherwise lcSplitterType = 'c' ENDCASE If m.lcCurType $ 'DT' For ix = 1 To Alen(taArray) taArray[m.ix] = Iif(m.lcCurType = 'D',; TRANSFORM(Dtoc(taArray[m.ix],1),'@R 9999/99/99'),; TRANSFORM(Ttoc(taArray[m.ix],1),'@R 9999/99/99 99:99:99')) Endfor Endif lcValueList = '' If !(Lower(m.lcValueList) == '.null.') For ix=1 To Alen(taArray) lcValueList = m.lcValueList + ; IIF(m.ix>1,',','') + ; TEXTMERGE('<<taArray[m.ix]>>') Endfor Endif toCommand.Parameters.Append( toCommand.CreateParameter("@"+SYS(2015),201,1,-1, m.lcValueList) ) RETURN TEXTMERGE(; Strtran(m.tcCommand,'(?)',; '(select [value] from <<m.lcSplitterType>>Splitter(?))',EVL(m.tnOccurence,1),1))SQL Server i,d and cSplitter functions:
Create function [dbo].[iSplitter] (@Parameter VARCHAR(MAX)) RETURNS @splitResult table (number int, [value] int) as begin SET @Parameter = ','+@Parameter +','; WITH cteTally AS ( SELECT TOP (LEN(@Parameter)) ROW_NUMBER() OVER (ORDER BY t1.Object_ID) AS N FROM Master.sys.All_Columns t1 CROSS JOIN Master.sys.All_Columns t2 ) insert @splitResult SELECT ROW_NUMBER() OVER (ORDER BY N) AS Number, SUBSTRING(@Parameter,N+1,CHARINDEX(',',@Parameter,N+1)-N-1) AS [Value] FROM cteTally WHERE N < LEN(@Parameter) AND SUBSTRING(@Parameter,N,1) = ',' return enddSplitter and cSplitter- difference is in return table definition:
-- ... RETURNS @splitResult table (number int, [value] datetime) -- ...
-- ... RETURNS @splitResult table (number int, [value] varchar(100)) -- ...I create a command like: