На основе отличного решения, предоставленного Сергеем для моего вопроса C# здесь: Filter out path strings beginning with strings, я ушел, чтобы создать аналогичную вещь для T-SQL. Я могу реорганизовать это для использования в таблице памяти в отличие от курсоров, но мне очень хотелось бы посмотреть, есть ли подход на основе набора, который я могу предпринять для достижения той же цели.Оставьте только корневые пути в хранимой процедуре sql
Сценарий: У меня есть пути в db, например: C: \ Users, C: \ Users \ cheese, D: \ Shadow \ stuff, D: \ Shadow. Мне нужно фильтровать пути оставив только те rootmost (например, из выше 4, оставьте только C: \ Users, D: \ Shadow)
Это то, что я есть сейчас:
ALTER PROCEDURE [dbo].[GetPaths]
@guy NVARCHAR(MAX)
AS
DECLARE
@tempPath NVARCHAR(MAX) = '',
@Path NVARCHAR (MAX),
@filteredPath TABLE (FilteredPath NVARCHAR(MAX))
BEGIN
SET NOCOUNT ON;
IF (@guy IS NOT NULL)
BEGIN
DECLARE C Cursor FOR
SELECT Paths.Path
WHERE
Paths.Username = @guy
ORDER BY Paths.Path DESC
OPEN C
FETCH NEXT FROM C INTO @Path
WHILE @@Fetch_Status=0 BEGIN
IF (CHARINDEX(@tempPath, @Path = 0)
BEGIN
INSERT INTO @filteredPath(FilteredPath)
VALUES (@Path)
END
SET @tempPath = @Path
FETCH NEXT FROM C into @Path
END
CLOSE C
DEALLOCATE C
SELECT * FROM @filteredPath
END
END
Какую версию SQL Server вы используете ? –
@GordonLinoff 2008 Express – zaitsman
использование не использует функцию разделения отсюда, http: //stackoverflow.com/questions/2647/split-string-in-sql использовать dbo.fn_Split из ссылки – KumarHarsh