트리거가 새로 도입되었습니다. 나는 이런 식의 테이블을 가지고있다.SQL Server 단순 삽입 트리거 문제
CREATE TABLE [dbo].[Positions](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ParentId] [int] NOT NULL,
[Path] [varchar](100) NULL,
[Title] [nvarchar](200) NOT NULL,
[Description] [nvarchar](1000) NULL
)
레코드를 삽입 할 때 트리거가 경로를 업데이트하는 트리거를 쓰려고한다.
The Path = the path of parent +/+ Id of new inserted record
.
나는 이런 식의 방아쇠를 가지고있다. 그러나 항상 1
을 Path
란에 맞춘다.
ALTER trigger [dbo].[ti_updatepath]
on [dbo].[Positions]
after insert
as
begin
declare @NewId int = (select Id from Inserted)
declare @NewParentId int = (select parentId from Inserted)
declare @ParentPath varchar ;
set @ParentPath = (select path from positions where Id = @NewParentId)
declare @Path varchar;
set @path = @ParentPath + '/'+ convert(varchar ,@NewId)
update Positions set Path = @path where Id= @NewId
end
는 추가 정보를 원하시면, 내 표는 다음과 같이 채워 : 당신은 자신의 길이를 지정해야합니다 문자 데이터 형식을 선언 할 때
이Id ParentId Path
1 0 1/
2 1 1/2
3 2 1/2/3
5 2 1/2/5
6 4 1/2/6
7 2 1/2/7
8 2 1/2/8
9 2 1/2/9
10 2 12/10
13 2 1/2/13
14 2 1/2/14
15 2 1/2/15
16 2 1/2/16
17 8 1/2/8/17
18 8 1/2/8/18
19 8 1/2/8/19
20 17 1/2/8/17/20
경로 변수는 260 자 이상이어야합니다. (\\? \ 접두어로 긴 경로 형식을 허용하면 길어집니다.) http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath –
@FilipDeVos, I 귀하의 의견을 upvoted 그것은 특별한 제안 (Windows 플랫폼, 파일 경로)에 대한 훌륭한 제안이기 때문에. 그러나 OP는 경로와 관련이있는 항목 (카테고리, 창 경로 또는 기타 항목)을 지정하지 않았습니다. –
나는 MS SQL 서버를 Windows로 가정했다. 그 형식은 또한 'NVARCHAR'이어야합니다. 물린 후 두 번 부끄러워. –