한다고 가정 - 나는 내가 설정에 나를 elementId로부터의 업데이트 할 수 있도록 저장 프로 시저 할 수 있어야합니다SQL Server 저장 프로 시저 (메뉴 시스템) - 마이크로 소프트 SQL 서버 2005
elementid, parentid, elementtitle, sortorder 160 0 Brand New Tutorial 1 161 160 Brand New Tutorial New Step 1 168 5 Tutorial Topic 1.1 1 171 168 Tutorial Topic 1.1.1 1 172 171 Tutorial Topic 1.1.1.1 1
테이블 구조 다음 한 부모 관계. 나는 이상의 테이블을 복사 할 임시 테이블을 사용하는 것이 가능하고 어떻게 든 내 표준 테이블에 삽입의 신원을 사용할 수 있습니다 생각
WITH menu AS
(
SELECT parentid, elementid, elementtitle, sortorder FROM dbo.ta_tutorial_elements WHERE (elementid = @eid)
UNION ALL
SELECT e.parentid, e.elementid, e.elementtitle, e.sortorderFROM dbo.ta_tutorial_elements AS e INNER JOIN menu AS m ON e.parentid = m.elementid
)
SELECT * INTO [#tmpA] FROM menu
: 여기
트리를 생성하기위한 내 일반 SQL입니다 elementid와 루트 부모로 시작합니다 ... 그러나, 그 후에는 모든 parentid, elementid의 관계를 재귀 적으로 우회하는 방법에 대해 꽤 많이 분실했습니다 ... (SQL Server에서도 가능합니까?). .절차는 [DBO] 에 SET NOCOUNT 옵션이 DECLARE을 BEGIN [sp_ta_copy_tutorial_by_id] @eid의 BIGINT AS BIGINT @recid CREATE
SET @recid = (SELECT IDENT_CURRENT('ta_tutorial_elements'));
WITH menu AS
(
SELECT parentid, elementid, elementtitle, sortorder, userid, createddate FROM dbo.ta_tutorial_elements WHERE (elementid = @eid)
UNION ALL
SELECT e.parentid, e.elementid, e.elementtitle, e.sortorder, e.userid, e.createddate FROM dbo.ta_tutorial_elements AS e INNER JOIN menu AS m ON e.parentid = m.elementid
)
SELECT * INTO [#tmpA] FROM menu
ALTER TABLE [#tmpA]
DROP COLUMN elementid
SELECT * INTO [#tmpB] FROM [#tmpA];
UPDATE b SET b.parentid =
CASE
WHEN b.parentid <> 0
THEN @recid
ELSE 0
END
FROM [#tmpB] as b
INSERT INTO [ta_tutorial_elements] SELECT * FROM [#tmpB]
DROP TABLE [#tmpA]
DROP TABLE [#tmpB]
END :
나는 다음과 같은 일을보고 있어요
"MSSQL"과 같은 것이 없습니다. 아마 당신이 "SQL Server"를 의미한다고 생각합니다. –
Microsoft (MS) SQL (Structured Query Language) MSSQL. :) –