多次创建 cte 并删除 cte
create cte multiple times and drop cte
我在存储过程中使用 cte。
我必须多次使用它,即为不同的 ID 填充 cte
如何删除或删除当前的 cte
谢谢
;WITH PAYOUT_CTE(REGNKEY, REGNTPE) AS (
SELECT REG_KEY, 'Parent'
FROM ML_MSTR_REGN A (NOLOCK)
WHERE A.COMP_NO = @COMP_NO
AND A.REG_KEY = @CUR_KEY
UNION ALL
SELECT B.REG_KEY, 'Child0'
FROM PAYOUT_CTE
INNER JOIN ML_MSTR_REGN B
ON B.COMP_NO = @COMP_NO
AND B.ORG_KEY = PAYOUT_CTE.REGNKEY
)
SELECT * INTO #PAYOUT_CTE_TMP FROM PAYOUT_CTE
我解决了,因为cte在插入语句后自动删除
只有温度 table #PAYOUT_CTE_TMP 导致了问题。
我能看到这个工作的唯一方法是将 CTE 代码放在一个内联 table 值函数中并调用它。
您的代码将类似于:
CREATE FUNCTION TVFN_PAYOUT_CTE (@COMP_NO INT, @CUR_KEY INT)
RETURNS TABLE
AS
RETURN (
WITH PAYOUT_CTE(REGNKEY, REGNTPE) AS (
SELECT REG_KEY, 'Parent'
FROM ML_MSTR_REGN A (NOLOCK)
WHERE A.COMP_NO = @COMP_NO
AND A.REG_KEY = @CUR_KEY
UNION ALL
SELECT B.REG_KEY, 'Child0'
FROM PAYOUT_CTE
INNER JOIN ML_MSTR_REGN B
ON B.COMP_NO = @COMP_NO
AND B.ORG_KEY = PAYOUT_CTE.REGNKEY
)
SELECT *
FROM PAYOUT_CTE
)
然后我可以交叉应用或外部应用到这个 table 值函数以根据输入值生成数据。
如果 COMP_NO
和 CUR_KEY
是 "TEST"
table 中的值,我可以将每一行与 COMP_NO
和 CUR_KEY
运行 具有这些值的 CTE 并保存它们,如下所示:
SELECT PC.*
INTO #PAYOUT_CTE_TMP
FROM TEST T
CROSS APPLY TVFN_PAYOUT_CTE (T.COMP_NO, T.CUR_KEY) PC
通过这样做,CTE 被重建并且 运行 来自 TEST
table 的每一行。
我在存储过程中使用 cte。
我必须多次使用它,即为不同的 ID 填充 cte
如何删除或删除当前的 cte
谢谢
;WITH PAYOUT_CTE(REGNKEY, REGNTPE) AS (
SELECT REG_KEY, 'Parent'
FROM ML_MSTR_REGN A (NOLOCK)
WHERE A.COMP_NO = @COMP_NO
AND A.REG_KEY = @CUR_KEY
UNION ALL
SELECT B.REG_KEY, 'Child0'
FROM PAYOUT_CTE
INNER JOIN ML_MSTR_REGN B
ON B.COMP_NO = @COMP_NO
AND B.ORG_KEY = PAYOUT_CTE.REGNKEY
)
SELECT * INTO #PAYOUT_CTE_TMP FROM PAYOUT_CTE
我解决了,因为cte在插入语句后自动删除 只有温度 table #PAYOUT_CTE_TMP 导致了问题。
我能看到这个工作的唯一方法是将 CTE 代码放在一个内联 table 值函数中并调用它。
您的代码将类似于:
CREATE FUNCTION TVFN_PAYOUT_CTE (@COMP_NO INT, @CUR_KEY INT)
RETURNS TABLE
AS
RETURN (
WITH PAYOUT_CTE(REGNKEY, REGNTPE) AS (
SELECT REG_KEY, 'Parent'
FROM ML_MSTR_REGN A (NOLOCK)
WHERE A.COMP_NO = @COMP_NO
AND A.REG_KEY = @CUR_KEY
UNION ALL
SELECT B.REG_KEY, 'Child0'
FROM PAYOUT_CTE
INNER JOIN ML_MSTR_REGN B
ON B.COMP_NO = @COMP_NO
AND B.ORG_KEY = PAYOUT_CTE.REGNKEY
)
SELECT *
FROM PAYOUT_CTE
)
然后我可以交叉应用或外部应用到这个 table 值函数以根据输入值生成数据。
如果 COMP_NO
和 CUR_KEY
是 "TEST"
table 中的值,我可以将每一行与 COMP_NO
和 CUR_KEY
运行 具有这些值的 CTE 并保存它们,如下所示:
SELECT PC.*
INTO #PAYOUT_CTE_TMP
FROM TEST T
CROSS APPLY TVFN_PAYOUT_CTE (T.COMP_NO, T.CUR_KEY) PC
通过这样做,CTE 被重建并且 运行 来自 TEST
table 的每一行。