Hi All
I have an unusual issue and wondered if someone could assist. have a table which contains a list of columns which i need to feed into the query. I have written some dynamic SQL as shown:
Declare @KeyString varchar(100) Declare @SQL1 nvarchar(max) Set @KeyString=(Select STUFF((SELECT '+' + Attr FROM ave_control.ETL.Source inner JOIN [DM_AVE2].[Reference].[CRKAttr] on client = sourcename COLLATE DATABASE_DEFAULT where Client = 'Brampton' Order by AttrOrder FOR XML PATH('')),1,1,'') AS KeyString) ; Set @SQL1 ='WITH CLAIMDATA AS( Select DB_NAME() AS DBName, Convert(Varchar,UK.KMPONO) + ''/'' + Convert(Varchar,UK.KMPOSQ) + ''/'' + Convert(Varchar,UK.KMUGYR) + ''/'' + Convert(Varchar,UK.KMDANO) AS [POLICYREF], Convert(Varchar,UK.KMPONO) + ''/'' + Convert(Varchar,UK.KMPOSQ) + ''/'' + Convert(Varchar,UK.KMUGYR) + ''/'' + Convert(Varchar,UK.KMDANO) + ''/'' + CONVERT(VarChar,UK.KMCMSQ) AS [CLAIMREF], left(19000000+KMLODT,4) as [LOSSYEAR], UK.KMLOCD AS [LOSSCODE], CASE WHEN KMLOCD = '''' then COALESCE(UC.LOLODS,'''') ELSE UC.LOLODS END AS LOSSDESCRIPTION, UK.KMEVCD AS [EVENTCODE], KMCMDS AS [CLAIMDESCRIPTION], CASE WHEN LEFT(KMCMDS,1) = ''@'' THEN ''Y'' ELSE ''N'' END AS [STATICRESERVEREVIEW], CASE WHEN UCE.EVEVDS IS NULL then COALESCE(UCE.EVEVDS,'''') ELSE UCE.EVEVDS END AS [EVENTCODEDESCRIPTION] FROM UKKMREP UK LEFT JOIN UCLOREP UC ON UK.KMLOCD = UC.LOLOCD LEFT JOIN UCEVREP UCE ON UK.KMEVCD = UCE.EVEVCD), COGDATA AS( SELECT TOP 100 PERCENT CONVERT(Varchar,POLICY)+''/''+CONVERT(Varchar,CO.SEQ)+''/''+CONVERT(Varchar,CO.[YEAR])+''/''+CONVERT(Varchar,CO.[DEC])+''/''+CONVERT(Varchar,CO.CLAIM) AS [CLAIMREF], [Type], SUM(isnull(CO.KCR,0)+isnull(CO.ACR,0)+isnull(CO.[OCR],0)+isnull(CO.[EXP],0)+isnull(Co.[LOC],0)) AS OLR FROM COG626A CO Group by CONVERT(Varchar,POLICY)+''/''+CONVERT(Varchar,CO.SEQ)+''/''+CONVERT(Varchar,CO.[YEAR])+''/''+CONVERT(Varchar,CO.[DEC])+''/''+CONVERT(Varchar,CO.CLAIM), [Type] ORDER BY CLAIMREF ), CLAIMRCData AS( Select distinct DB_NAME() As DBNAME, Convert(Varchar,UK.KMPONO) + ''/'' + Convert(Varchar,UK.KMPOSQ) + ''/'' + Convert(Varchar,UK.KMUGYR) + ''/'' + Convert(Varchar,UK.KMDANO) + ''/'' + CONVERT(VarChar,UK.KMCMSQ) AS [CLAIMREF], Convert(varchar,isnull(pocscd,'''')) as POCSCD, Convert(varchar,isnull(pomkrf,'''')) AS PMKRF, Convert(varchar,isnull(poplcd,'''')) AS POPLCD, Convert(varchar,isnull(poqdfg,'''')) AS POQDFG, Convert(varchar,isnull(pougty,'''')) AS POUGTY, Convert(varchar,isnull(pogucd,'''')) AS POGUCD, Convert(varchar,isnull(kmbhcd,'''')) AS KMBHCD, Convert(varchar,isnull(kmcccd,'''')) AS KMCCCD, Convert(varchar,isnull(kmdpdv,'''')) AS KMDPDV, Convert(varchar,isnull(kmevcd,'''')) AS KMEVCD, Convert(varchar,isnull(kmimcd,'''')) AS KMIMCD, Convert(varchar,isnull(kmiycd,'''')) AS KMIYCD, Convert(varchar,isnull(kmlocd,'''')) AS KMLOCD from UPPOREP UP Left join UKKMREP UK on UP.POPONO = UK.KMPONO AND UP.POPOSQ = KMPOSQ AND UP.POUGYR = UK.kmugyr AND UP.PODANO = UK.KMDANO) Select distinct C1.DBName, C1.POLICYREF, C1.CLAIMREF, C1.LossDescription, C1.LOSSCODE, C1.LOSSYEAR, C1.EventCode, C1.ClaimDescription, C1.StaticReserveReview, C1.EventCodeDescription,' + @KeyString + ' AS ClaimKey, Round(CG1.OLR,2) as [OLR], CASE WHEN CG1.OLR <> 0 THEN ''OPEN'' ELSE ''CLOSED'' END AS [ClaimStatus] FROM CLAIMDATA C1 LEFT JOIN COGDATA CG1 on C1.CLAIMREF = CG1.CLAIMREF LEFT JOIN CLAIMRCData CR on C1.CLAIMREF = CR.CLAIMREF UNION Select distinct C1.DBName, C1.POLICYREF, SUBSTRING(CG1.ClaimRef,1,Len(CG1.ClaimRef)-2) + ''/0'', '''' AS LossDescription, '''' AS LossCode, 1912 AS LossYear, '''' AS EventCode, '''' AS ClaimDescription, '''' AS StaticReserveReview, '''' AS EventCodeDescription,' + @KeyString + ' AS ClaimKey, 0 AS OLR, ''CLOSED'' AS CLAIMSTATUS From CLAIMDATA C1 INNER JOIN COGDATA CG1 on C1.CLAIMREF = CG1.CLAIMREF LEFT JOIN CLAIMRCData CR on C1.CLAIMREF = CR.CLAIMREF Order by C1.POLICYREF' Select @SQL1
I always want to output @Keystring using a DFT but depending on the client the Keystring is set to a different group of columns and selects a different set of columns from the CLAIMRCData loop.
I tried inserting it as dynamic SQL as a variable but cannot get it to parse - does anyone know how to achieve this?
Here is the output from the Select @SQL1 which always returns the value I want and if i execute this and change the clientname it successfully returns the right claimkey each time - i.e. another client has 3 columns and these are successfully parsed - i just dont know how to get it into SSIS. Output as shown:
WITH CLAIMDATA AS( Select DB_NAME() AS DBName, Convert(Varchar,UK.KMPONO) + '/' + Convert(Varchar,UK.KMPOSQ) + '/' + Convert(Varchar,UK.KMUGYR) + '/' + Convert(Varchar,UK.KMDANO) AS [POLICYREF], Convert(Varchar,UK.KMPONO) + '/' + Convert(Varchar,UK.KMPOSQ) + '/' + Convert(Varchar,UK.KMUGYR) + '/' + Convert(Varchar,UK.KMDANO) + '/' + CONVERT(VarChar,UK.KMCMSQ) AS [CLAIMREF], left(19000000+KMLODT,4) as [LOSSYEAR], UK.KMLOCD AS [LOSSCODE], CASE WHEN KMLOCD = '' then COALESCE(UC.LOLODS,'') ELSE UC.LOLODS END AS LOSSDESCRIPTION, UK.KMEVCD AS [EVENTCODE], KMCMDS AS [CLAIMDESCRIPTION], CASE WHEN LEFT(KMCMDS,1) = '@' THEN 'Y' ELSE 'N' END AS [STATICRESERVEREVIEW], CASE WHEN UCE.EVEVDS IS NULL then COALESCE(UCE.EVEVDS,'') ELSE UCE.EVEVDS END AS [EVENTCODEDESCRIPTION] FROM UKKMREP UK LEFT JOIN UCLOREP UC ON UK.KMLOCD = UC.LOLOCD LEFT JOIN UCEVREP UCE ON UK.KMEVCD = UCE.EVEVCD), COGDATA AS( SELECT TOP 100 PERCENT CONVERT(Varchar,POLICY)+'/'+CONVERT(Varchar,CO.SEQ)+'/'+CONVERT(Varchar,CO.[YEAR])+'/'+CONVERT(Varchar,CO.[DEC])+'/'+CONVERT(Varchar,CO.CLAIM) AS [CLAIMREF], [Type], SUM(isnull(CO.KCR,0)+isnull(CO.ACR,0)+isnull(CO.[OCR],0)+isnull(CO.[EXP],0)+isnull(Co.[LOC],0)) AS OLR FROM COG626A CO Group by CONVERT(Varchar,POLICY)+'/'+CONVERT(Varchar,CO.SEQ)+'/'+CONVERT(Varchar,CO.[YEAR])+'/'+CONVERT(Varchar,CO.[DEC])+'/'+CONVERT(Varchar,CO.CLAIM), [Type] ORDER BY CLAIMREF ), CLAIMRCData AS( Select distinct DB_NAME() As DBNAME, Convert(Varchar,UK.KMPONO) + '/' + Convert(Varchar,UK.KMPOSQ) + '/' + Convert(Varchar,UK.KMUGYR) + '/' + Convert(Varchar,UK.KMDANO) + '/' + CONVERT(VarChar,UK.KMCMSQ) AS [CLAIMREF], Convert(varchar,isnull(pocscd,'')) as POCSCD, Convert(varchar,isnull(pomkrf,'')) AS PMKRF, Convert(varchar,isnull(poplcd,'')) AS POPLCD, Convert(varchar,isnull(poqdfg,'')) AS POQDFG, Convert(varchar,isnull(pougty,'')) AS POUGTY, Convert(varchar,isnull(pogucd,'')) AS POGUCD, Convert(varchar,isnull(kmbhcd,'')) AS KMBHCD, Convert(varchar,isnull(kmcccd,'')) AS KMCCCD, Convert(varchar,isnull(kmdpdv,'')) AS KMDPDV, Convert(varchar,isnull(kmevcd,'')) AS KMEVCD, Convert(varchar,isnull(kmimcd,'')) AS KMIMCD, Convert(varchar,isnull(kmiycd,'')) AS KMIYCD, Convert(varchar,isnull(kmlocd,'')) AS KMLOCD from UPPOREP UP Left join UKKMREP UK on UP.POPONO = UK.KMPONO AND UP.POPOSQ = KMPOSQ AND UP.POUGYR = UK.kmugyr AND UP.PODANO = UK.KMDANO) Select distinct C1.DBName, C1.POLICYREF, C1.CLAIMREF, C1.LossDescription, C1.LOSSCODE, C1.LOSSYEAR, C1.EventCode, C1.ClaimDescription, C1.StaticReserveReview, C1.EventCodeDescription,pogucd+pougty AS ClaimKey, Round(CG1.OLR,2) as [OLR], CASE WHEN CG1.OLR <> 0 THEN 'OPEN' ELSE 'CLOSED' END AS [ClaimStatus] FROM CLAIMDATA C1 LEFT JOIN COGDATA CG1 on C1.CLAIMREF = CG1.CLAIMREF LEFT JOIN CLAIMRCData CR on C1.CLAIMREF = CR.CLAIMREF UNION Select distinct C1.DBName, C1.POLICYREF, SUBSTRING(CG1.ClaimRef,1,Len(CG1.ClaimRef)-2) + '/0', '' AS LossDescription, '' AS LossCode, 1912 AS LossYear, '' AS EventCode, '' AS ClaimDescription, '' AS StaticReserveReview, '' AS EventCodeDescription,pogucd+pougty AS ClaimKey, 0 AS OLR, 'CLOSED' AS CLAIMSTATUS From CLAIMDATA C1 INNER JOIN COGDATA CG1 on C1.CLAIMREF = CG1.CLAIMREF LEFT JOIN CLAIMRCData CR on C1.CLAIMREF = CR.CLAIMREF Order by C1.POLICYREF
any help would be greatly appreciated - oh version is SQL 2014 SSIS
Thanks
James