Постарайтесь не просить, чтобы пользователь сделал выбор каждый раз, когда Вы можете (т.е. не создавать ветвление с диалоговым окном конфигурации!)
Для каждой опции и каждого окна сообщения, спросите себя: я могу вместо этого придумать некоторое разумное поведение по умолчанию, которое
я могу использовать свой карманный компьютер Palm в качестве примера: настройки являются действительно минималистическими, и я довольно доволен этим. Основные приложения хорошо разработаны достаточно, что я могу просто использовать их, не чувствуя потребность в тонкой настройке. Хорошо, существуют некоторые вещи, которые я не могу сделать, и на самом деле я сортирую, должен был адаптироваться к инструменту (вместо противоположного), но в конце это действительно делает мою жизнь легче.
Этот веб-сайт является другим примером: Вы ничего не можете настроить, и все же я нахожу действительно хорошим использовать.
Разумные значения по умолчанию может быть трудно выяснить, и простые тесты удобства использования могут дать много представлений для помощи Вам с этим.
Попробуйте это:
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
Похоже, вам следует проверить поддержку CLR для Sql Sever.
Интеграция CLR означает, что теперь вы можете писать хранимые процедуры, триггеры, определяемые пользователем типы, пользовательские- определенные функции (скалярные и возвращающие табличное значение) и определяемые пользователем агрегатные функции с использованием любого языка .NET Framework, включая Microsoft Visual Basic .NET и Microsoft Visual C #.
Я не уверен, что это сработает в вашем случае, но в этом примере http://www.pure-performance.com/2009/03/managing-hierarchical-data-in-sql/ есть кое-что об использовании дополнительного столбца, называемого lineage.
Я успешно использовал этот метод.