Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 有没有简单的方法将多个.txt文件导入SQL server?_Sql Server_Bulkinsert_Openrowset - Fatal编程技术网

Sql server 有没有简单的方法将多个.txt文件导入SQL server?

Sql server 有没有简单的方法将多个.txt文件导入SQL server?,sql-server,bulkinsert,openrowset,Sql Server,Bulkinsert,Openrowset,我正在尝试将24.txt文件导入服务器,但权限有限。所有文件都以相同的字符开头,但“*”此掩蔽不能用于此查询。我使用下面的脚本 SELECT * into TABLE FROM OPENROWSET( BULK 'c:\path\files\good*.txt', FORMATFILE = 'c:\path\files\import.xml',FIRSTROW = 2) AS DATA; 您需要先创建表,然后使用循环插入每个文件 创建目标表后,请尝试以下脚本: declare @fil

我正在尝试将24.txt文件导入服务器,但权限有限。所有文件都以相同的字符开头,但“*”此掩蔽不能用于此查询。我使用下面的脚本

    SELECT * into TABLE
FROM OPENROWSET( BULK 'c:\path\files\good*.txt', FORMATFILE = 'c:\path\files\import.xml',FIRSTROW = 2) AS DATA;

您需要先创建表,然后使用循环插入每个文件

创建目标表后,请尝试以下脚本:

declare @filepath varchar(100)= 'c:\path\files\'
    ,@pattern varchar(100)= 'good*.txt'
    ,@TableName varchar(100)= 'TestTable'

DECLARE @query varchar(1000)
DECLARE @numfiles int
DECLARE @filename varchar(100)
DECLARE @files TABLE (SourceFileName varchar(200) NULL)

SET @query = 'master.dbo.xp_cmdshell "dir ' + @filepath+@pattern + ' /b"'
INSERT @files(SourceFileName) 
EXEC (@query)

DECLARE CUR CURSOR FAST_FORWARD FOR
SELECT SourceFileName FROM @files WHERE SourceFileName IS NOT NULL

SET @numfiles =0
OPEN CUR
FETCH NEXT FROM CUR INTO @filename
WHILE (@@FETCH_STATUS = 0)
BEGIN
    print @filename
    SET @numfiles+=1

    SET @query = ('BULK INSERT ' + @TableName
                    + ' FROM ''' + @Filepath+@filename + ''' WITH(
                        FORMATFILE = ''c:\path\files\import.xml'',
                        FIRSTROW = 2
                        );'
              )
    PRINT @query
    EXEC (@query)

    FETCH NEXT FROM CUR INTO @filename
END

CLOSE CUR
DEALLOCATE CUR