【问题标题】:Delete parent and child records depending on search text根据搜索文本删除父子记录
【发布时间】:2016-09-16 06:52:09
【问题描述】:

根据我的应用程序中的搜索文本,我必须从以下格式的表中删除父记录和子记录:

tabItem

+--------+--------------+----------+-----------------+
| ItemId | ItemParentId | ItemName | ItemDescription |
+--------+--------------+----------+-----------------+

如果我在应用程序内的文本框中键入例如“信息”并单击“过滤器”,如果树中最低的项目包含“信息”,我必须删除每个父项和子项。

树以获得更好的解释:

Category 1
|
+--- Subcategory
     |
     +--- Subsubcategory
          |
          +--- Item (contains "information" in ItemDescription)
Category 2
|
+--- Subcategory
     |
     +--- Subsubcategory
          |
          +--- Item (doesn't contain "information")

现在我必须删除包含“信息”的项目以及所有的父母和祖父母。

我尝试使用以下cte:

WITH cte_toDelete
AS
(
    SELECT *
    FROM tabItem
    UNION ALL
    SELECT cte_toDelete.*
    FROM cte_toDelete
    INNER JOIN tabItem ON cte_toDelete.ItemParentId = tabItem.ItemId
)
DELETE FROM tabItem
WHERE ItemId IN
(
    SELECT ItemId
    FROM cte_toDelete
    WHERE cte_toDelete.ItemName NOT LIKE '%' + @SearchText + '%'
    AND cte_toDelete.ItemDescription NOT LIKE '%' + @SearchText + '%'
)

但是当我运行这些行时,我收到以下错误:

语句终止。在语句完成之前,最大递归 100 已用完。

我的cte 有什么问题?

【问题讨论】:

    标签: sql-server tsql sql-server-2014 sql-delete common-table-expression


    【解决方案1】:

    CTE 只允许最大 100 次递归

    我们可以使用MAXRECURSION 更改其设置,MAXRECURSION 的值可以在 0 到 32,767 之间

    更多信息MAXRECURSION

    WITH cte_toDelete
    AS
    (
       SELECT *
       FROM tabItem
       UNION ALL
       SELECT cte_toDelete.*
       FROM cte_toDelete
       INNER JOIN tabItem ON cte_toDelete.ItemParentId = tabItem.ItemId
    )
    DELETE FROM tabItem
    WHERE ItemId IN
    (
      SELECT ItemId
      FROM cte_toDelete
      WHERE cte_toDelete.ItemName NOT LIKE '%' + @SearchText + '%'
      AND cte_toDelete.ItemDescription NOT LIKE '%' + @SearchText + '%'
     )
     OPTION (MAXRECURSION 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 2013-01-07
      • 2022-01-01
      • 2013-09-04
      相关资源
      最近更新 更多