Рекурсивный запрос той-же-таблицы в SQL Server 2008

Постарайтесь не просить, чтобы пользователь сделал выбор каждый раз, когда Вы можете (т.е. не создавать ветвление с диалоговым окном конфигурации!)

Для каждой опции и каждого окна сообщения, спросите себя: я могу вместо этого придумать некоторое разумное поведение по умолчанию, которое

  • имеет смысл?
  • не стоит на пути?
  • достаточно легко узнать, что это стоит малого пользователю, что я налагаю это на него?

я могу использовать свой карманный компьютер Palm в качестве примера: настройки являются действительно минималистическими, и я довольно доволен этим. Основные приложения хорошо разработаны достаточно, что я могу просто использовать их, не чувствуя потребность в тонкой настройке. Хорошо, существуют некоторые вещи, которые я не могу сделать, и на самом деле я сортирую, должен был адаптироваться к инструменту (вместо противоположного), но в конце это действительно делает мою жизнь легче.

Этот веб-сайт является другим примером: Вы ничего не можете настроить, и все же я нахожу действительно хорошим использовать.

Разумные значения по умолчанию может быть трудно выяснить, и простые тесты удобства использования могут дать много представлений для помощи Вам с этим.

14
задан CesarGon 18 November 2009 в 17:01
поделиться

3 ответа

Попробуйте это:

    DECLARE @tbl TABLE (
         Id INT
        ,[Name] VARCHAR(20)
        ,ParentId INT
        )

    INSERT INTO @tbl( Id, Name, ParentId )
    VALUES
     (1, 'Europe', NULL)
    ,(2, 'Asia',   NULL)
    ,(3, 'Germany', 1)
    ,(4, 'UK',      1)
    ,(5, 'China',   2)
    ,(6, 'India',   2)
    ,(7, 'Scotland', 4)
    ,(8, 'Edinburgh', 7)
    ,(9, 'Leith', 8)

    ;
WITH  abcd
        AS (
              -- anchor
            SELECT  id, [Name], ParentID,
                    CAST(([Name]) AS VARCHAR(1000)) AS "Path"
            FROM    @tbl
            WHERE   ParentId IS NULL
            UNION ALL
              --recursive member
            SELECT  t.id, t.[Name], t.ParentID,
                    CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path"
            FROM    @tbl AS t
                    JOIN abcd AS a
                      ON t.ParentId = a.id
           )
SELECT * FROM abcd
35
ответ дан 1 December 2019 в 06:59
поделиться

Похоже, вам следует проверить поддержку CLR для Sql Sever.

Интеграция CLR означает, что теперь вы можете писать хранимые процедуры, триггеры, определяемые пользователем типы, пользовательские- определенные функции (скалярные и возвращающие табличное значение) и определяемые пользователем агрегатные функции с использованием любого языка .NET Framework, включая Microsoft Visual Basic .NET и Microsoft Visual C #.

2
ответ дан 1 December 2019 в 06:59
поделиться

Я не уверен, что это сработает в вашем случае, но в этом примере http://www.pure-performance.com/2009/03/managing-hierarchical-data-in-sql/ есть кое-что об использовании дополнительного столбца, называемого lineage.

Я успешно использовал этот метод.

2
ответ дан 1 December 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: