使用存储过程创建文件夹时,SQL Server Msg 50000

时间:2019-05-14 17:19:21

标签: sql-server tsql ole

我正在使用存储过程来创建文件夹,然后使用从"type": "networkConfig"列中提取的文件来填充文件夹。该过程适用于许多行,但是我从其他行收到以下错误:

  

消息50000,级别16,状态1,过程dbo.CreateFolder,第31行[批处理开始第0行]

我不确定这意味着什么,或者为什么会在某些行而不是其他行上发生。

我的存储过程是:

varBinary

然后我正在使用T-SQL使用this guide

提取文件
ALTER PROCEDURE [dbo].[CreateFolder] 
    (@newfolder VARCHAR(1000)) 
AS  
BEGIN  
    DECLARE @OLEfolder INT  
    DECLARE @OLEsource VARCHAR(255)  
    DECLARE @OLEdescription VARCHAR(255) 
    DECLARE @init INT  
    DECLARE @OLEfilesytemobject INT  

    -- it will fail if OLE automation not enabled
    EXEC @init=sp_OACreate 'Scripting.FileSystemObject', @OLEfilesytemobject OUT  

    IF @init <> 0  
    BEGIN  
        EXEC sp_OAGetErrorInfo @OLEfilesytemobject  
        RETURN  
    END  

    -- check if folder exists  
    EXEC @init = sp_OAMethod @OLEfilesytemobject, 'FolderExists', @OLEfolder OUT, @newfolder  

    -- if folder doesn't exist, create it  
    IF @OLEfolder = 0  
    BEGIN  
        EXEC @init = sp_OAMethod @OLEfilesytemobject, 'CreateFolder', @OLEfolder OUT, @newfolder  
    END  

    -- in case of error, raise it   
    IF @init <> 0  
    BEGIN  
        EXEC sp_OAGetErrorInfo @OLEfilesytemobject, @OLEsource OUT, @OLEdescription OUT  

        SELECT @OLEdescription = 'Could not create folder: ' + @OLEdescription  
        RAISERROR (@OLEdescription, 16, 1)   
    END  

    EXECUTE @init = sp_OADestroy @OLEfilesytemobject  
END  

有人对出什么问题有想法吗?

我尝试使用存储过程和T-SQL(由Marc编写)的编辑版本,但是错误显示在每一行上,并且没有生成文件。还原T-SQL但保留Marc的存储过程的结果与原始结果相同。

1 个答案:

答案 0 :(得分:0)

从数据库到文件系统的提取过程中,您似乎试图在不存在的文件夹中创建一个文件夹。

只能使用现有文件夹创建具有此过程的文件夹。

例如:

EXEC [dbo].[CreateFolder] 'C:\DocsFromDB\2019'

如果2019不存在,则无法创建文件夹DocsFromDB。您应该首先创建DocsFromDB以便能够在其中创建其他文件夹。