Sergey가 제공 한 훌륭한 솔루션을 기반으로 여기에 Filter out path strings beginning with strings의 C# 질문이 생겼습니다. T-SQL과 비슷한 기술을 사용하려고했습니다. 커서를 메모리 테이블에서 사용하도록 리팩터링 할 수 있지만 같은 목표를 달성하기 위해 취할 수있는 세트 기반 접근 방식이 있는지 확인하고 싶습니다.SQL 저장 프로 시저의 최상위 경로 만 남겨주세요.
시나리오 : db : C : \ Users, C : \ Users \ cheese, D : \ Shadow \ stuff, D : \ Shadow와 같은 경로가 있습니다. 나는 단지 rootmost 것들을 떠나 경로를 필터링해야 (예를 들어, 위의 4에서 만 C를 떠나 : \ 사용자를, D를 : \ 그림자)이 내가 지금 무엇을 가지고
:
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 서버의 어떤 버전을 사용하고 있습니다 ? –
@GordonLinoff 2008 Express – zaitsman
여기에서 분할 기능을 사용하지 마십시오. http : //stackoverflow.com/questions/2647/split-string-in-sql – KumarHarsh