updateステートメントを実行するたびに再帰関数を呼び出すストアドプロシージャを作成したいと思います。
私はというテーブルを持っていますdocument
documentId folderId
---------- --------
1222 1
1256 2
1257 3
そしてfolder
テーブル:
folderId parentFolder
-------- -----------
1 5
2 1
3 2
5 null
私のストアドプロシージャはフォルダ番号(1)を削除します。削除されると、フォルダ1とサブフォルダ1のすべてのドキュメントを親フォルダ1に移動する必要があります。
どうやってするか?
CREATE FUNCTION fn_deleteSubFolderDocument
(
@folderId INT ,
@newFolderId INT
)
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @count2 int
SET @count2=(SELECT COUNT(*) FROM dbo.tbl_document_folder WHERE parent_folder=@folderId)
UPDATE tbl_document SET folder_id=@newFolderId WHERE folder_id=@folderId
IF(@count2 !=0)
BEGIN
DECLARE @table TABLE(id INT IDENTITY(1,1),folderId INT,parentFolder int )
INSERT INTO @table(folderId,parentFolder)
SELECT folder_id,parent_folder FROM dbo.tbl_document_folder WHERE parent_folder=folder_id
DECLARE @index INT =0
WHILE @index<@count2
BEGIN
SET @index=@index+1
RETURN fn_deleteSubFolderDocument((SELECT folderId FROM @table WHERE id=@index),(SELECT parentFolder FROM @table WHERE id=@index ))
END
END
END
GO