2016-12-21 10 views
0

私はデータベースとパスの名前をパラメータとして受け取り、ディレクトリを作成する次の手順を実行します。ここでの私の問題は、私は、フォルダを上書きするか、それを削除してから新しいものにそのようなことSQL Serverからディレクトリを削除する方法は?

NOTEを行う方法のいずれかのアイデアを作成する必要があります。この手順では、0と1

ALTER PROCEDURE[dbo].[SP_CreateFolder] 
    @P_PATH VARCHAR(100), 
    @P_DBName VARCHAR(100) 
AS 
    DECLARE @DBName sysname 
    DECLARE @DataPath nvarchar(500) 
    DECLARE @LogPath nvarchar(500) 
    DECLARE @DirTree TABLE (subdirectory nvarchar(255), depth INT) 

    -- Initialize variables 
    SET @DBName = @P_DBName 
    SET @DataPath = @P_PATH 

    -- @DataPath values 
    INSERT INTO @DirTree(subdirectory, depth) 
     EXEC master.sys.xp_dirtree @DataPath 

    SELECT * FROM @DirTree 

    -- Create the @DataPath directory 
    --IF (SELECT depth from @DirTree)!= 1 
    --EXEC master.dbo.xp_Delete_file @DBName 
    IF NOT EXISTS (SELECT 1 FROM @DirTree WHERE subdirectory = @DBName) 
    BEGIN 
     EXEC master.dbo.xp_create_subdir @DataPath 
    END 

    -- Remove all records from @DirTree 
    DELETE FROM @DirTree 
+3

サイドノート:ストアドプロシージャのプレフィックス 'sp_'を使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

答えて

0
の深さのフォルダに作成されます

最初に、警告:T-SQLを使用してファイルシステムを操作することは通常はお勧めできません。また、実行する際に多くのリスクが想定されます。

declare @rmdircmd nvarchar(280) 
declare @dirname nvarchar(280) 
set @dirname = 'C:\blah\blah\' 
set @rmdircmd = N'RMDIR ' + @dirname + ' /S /Q' 
exec master.dbo.xp_cmdshell @rmdircmd, no_output 

幸運:あなたはこのように、あなたは(など、フォルダを削除)したいと思うものは何でものためのコマンドライン構文でxp_cmdshellを使用することができ、言っ

関連する問題