| Author |
Topic |
|
Rasta Pickles
Posting Yak Master
174 Posts |
Posted - 2012-07-18 : 14:19:17
|
I've inherited the following and the third party software I'm using doesn't recognise temporary tables although it seems to be fine with CTE's.I have no experience with CTE's so down't even know if what I'm asking is do-able.Any advice gratefully accepted  DECLARE @FutureReleases AS TABLE (TRANSACTION_MONTH CHAR(6) ,BrCID VARCHAR (10) ,Fnid VARCHAR (2) ,shid VARCHAR (3) ,INTEREST MONEY ,INTEREST_EARNED MONEY ,NET_INTEREST_OUTSTANDING MONEY) INSERT INTO @FutureReleasesSELECT CONVERT(CHAR(6),TH.EFFECTIVE_DATE,112) AS TRANSACTION_MONTH,RIGHT('000' + CAST(A.BROKER_COMPANY_ID AS VARCHAR), 3) + '_' + RIGHT('000' + CAST([INSURANCE_TYPE_ID] AS VARCHAR), 3) AS BrCID,RIGHT('0000' + CAST(A.FINANCIER_ID AS VARCHAR), 2) AS Fnid,RIGHT('0000' + CAST(A.SCHEME_ID AS VARCHAR), 3) AS shid,ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (1, 2, 3, 5) THEN ISNULL(TH.INTEREST_VALUE, 0) END), 0) AS INTEREST,ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (4, 9, 10, 20, 21, 24) THEN ISNULL(INTEREST_VALUE, 0) END), 0) AS INTEREST_EARNED,ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (1, 2, 3, 5) THEN ISNULL(TH.INTEREST_VALUE, 0) END), 0)-ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (4, 9, 10, 20, 21, 24) THEN ISNULL(INTEREST_VALUE, 0) END), 0)AS NET_INTEREST_OUTSTANDINGFROM TRANSACTION_HEADER AS THJOIN AGREEMENTS AS A ON A.AGREEMENT_ID = TH.AGREEMENT_IDWHERE TRANSACTION_TYPE_ID IN (1, 2, 3, 4, 5, 9, 10, 20, 21, 24)AND CHARGE_NUMBER IS NULLGROUP BY CONVERT(CHAR(6),TH.EFFECTIVE_DATE,112), BROKER_COMPANY_ID, INSURANCE_TYPE_ID, FINANCIER_ID, SCHEME_IDDECLARE @YearMonth AS TABLE (TRANSACTION_MONTH CHAR(6)) INSERT INTO @YearMonthSELECT DISTINCT TRANSACTION_MONTHFROM @FutureReleasesDECLARE @Cumulative AS TABLE (TRANSACTION_MONTH CHAR(6) ,BrCID VARCHAR (10) ,Fnid VARCHAR (2) ,shid VARCHAR (3)) INSERT INTO @CumulativeSELECT DISTINCT YM.TRANSACTION_MONTH,BrCID,Fnid,shidFROM @YearMonth AS YMCROSS JOIN @FutureReleases AS FRSELECTTRANSACTION_MONTH,BrCID,Fnid,shid,(SELECT ISNULL(SUM(ISNULL(NET_INTEREST_OUTSTANDING, 0)), 0) FROM @FutureReleases AS F WHERE F.BrCID = C.BrCID AND F.Fnid = C.Fnid AND F.shid = C.shidAND F.TRANSACTION_MONTH <= C.TRANSACTION_MONTH) AS INTEREST_FOR_FUTURE_RELEASEFROM@Cumulative AS CWHERE(SELECT ISNULL(SUM(ISNULL(NET_INTEREST_OUTSTANDING, 0)), 0) FROM @FutureReleases AS F WHERE F.BrCID = C.BrCID AND F.Fnid = C.Fnid AND F.shid = C.shidAND F.TRANSACTION_MONTH <= C.TRANSACTION_MONTH) <> 0 |
|
|
nigelrivett
Master Smack Fu Yak Hacker
3385 Posts |
Posted - 2012-07-18 : 14:39:13
|
| >> the third party software I'm using doesn't recognise temporary tables Try thisput aset nocount onat the top of the codeafter that addif 1=0 -- return resultset with output formatselect TRANSACTION_MONTH = space(6) ,BrCID = space(10) ,....Could be that the front end is trying to get the resultset format before the call.This will use the first select it finds - hence the select that is never executedTheset nocount onis to stop it getting upset by the closed resultset for the rowcount.==========================================Cursors are useful if you don't know sql.SSIS can be used in a similar way.Beer is not cold and it isn't fizzy. |
 |
|
|
nigelrivett
Master Smack Fu Yak Hacker
3385 Posts |
Posted - 2012-07-18 : 14:42:42
|
| alternatively using ctes;with FutureReleases as(SELECT CONVERT(CHAR(6),TH.EFFECTIVE_DATE,112) AS TRANSACTION_MONTH,RIGHT('000' + CAST(A.BROKER_COMPANY_ID AS VARCHAR), 3) + '_' + RIGHT('000' + CAST([INSURANCE_TYPE_ID] AS VARCHAR), 3) AS BrCID,RIGHT('0000' + CAST(A.FINANCIER_ID AS VARCHAR), 2) AS Fnid,RIGHT('0000' + CAST(A.SCHEME_ID AS VARCHAR), 3) AS shid,ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (1, 2, 3, 5) THEN ISNULL(TH.INTEREST_VALUE, 0) END), 0) AS INTEREST,ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (4, 9, 10, 20, 21, 24) THEN ISNULL(INTEREST_VALUE, 0) END), 0) AS INTEREST_EARNED,ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (1, 2, 3, 5) THEN ISNULL(TH.INTEREST_VALUE, 0) END), 0)-ISNULL(SUM(CASE WHEN TH.TRANSACTION_TYPE_ID IN (4, 9, 10, 20, 21, 24) THEN ISNULL(INTEREST_VALUE, 0) END), 0)AS NET_INTEREST_OUTSTANDINGFROM TRANSACTION_HEADER AS THJOIN AGREEMENTS AS A ON A.AGREEMENT_ID = TH.AGREEMENT_IDWHERE TRANSACTION_TYPE_ID IN (1, 2, 3, 4, 5, 9, 10, 20, 21, 24)AND CHARGE_NUMBER IS NULLGROUP BY CONVERT(CHAR(6),TH.EFFECTIVE_DATE,112), BROKER_COMPANY_ID, INSURANCE_TYPE_ID, FINANCIER_ID, SCHEME_ID) ,YearMonth as(SELECT DISTINCT TRANSACTION_MONTHFROM FutureReleases) ,Cumulative as(SELECT DISTINCT YM.TRANSACTION_MONTH,BrCID,Fnid,shidFROM YearMonth AS YMCROSS JOIN FutureReleases AS FR)SELECTTRANSACTION_MONTH,BrCID,Fnid,shid,(SELECT ISNULL(SUM(ISNULL(NET_INTEREST_OUTSTANDING, 0)), 0) FROM FutureReleases AS F WHERE F.BrCID = C.BrCID AND F.Fnid = C.Fnid AND F.shid = C.shidAND F.TRANSACTION_MONTH <= C.TRANSACTION_MONTH) AS INTEREST_FOR_FUTURE_RELEASEFROMCumulative AS CWHERE(SELECT ISNULL(SUM(ISNULL(NET_INTEREST_OUTSTANDING, 0)), 0) FROM FutureReleases AS F WHERE F.BrCID = C.BrCID AND F.Fnid = C.Fnid AND F.shid = C.shidAND F.TRANSACTION_MONTH <= C.TRANSACTION_MONTH) <> 0==========================================Cursors are useful if you don't know sql.SSIS can be used in a similar way.Beer is not cold and it isn't fizzy. |
 |
|
|
Rasta Pickles
Posting Yak Master
174 Posts |
Posted - 2012-07-19 : 00:39:49
|
Thank you Nigel, I will try that out later.Much appreciated |
 |
|
|
Rasta Pickles
Posting Yak Master
174 Posts |
Posted - 2012-07-19 : 13:28:24
|
| Are CTEs inefficient?My code as adapted by Nigel was still running in Management Studio when I left the office earlier (2hrs since start) - the original code took approximately 37 minutes to complete. |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2012-07-19 : 13:29:51
|
quote: Originally posted by Rasta Pickles Are CTEs inefficient?My code as adapted by Nigel was still running in Management Studio when I left the office earlier (2hrs since start) - the original code took approximately 37 minutes to complete.
depends on how you've written them and also on level of recursion. Did you analyse and see whats causing bottleneck in execution plan?------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
|
|
|