如何把一个文件导入到SQLserver数据库中

2024-11-17 08:27:51
推荐回答(2个)
回答1:

一是需要在目的数据库中先建立相关的表。如想把进销存系统数据库(SQLServer)中的产品信息表(Product)导入到ERP系统中的产品信息表(M_Product)中。则前期是在ERP系统的数据库中已经建立了这张产品信息表。

二是这种方法只复制表中的数据,而不复制表中的索引。如在进销存系统数据中的产品信息表中,在产品编号、产品种类等字段上建立了索引。则利用Select Into语句把数据复制到ERP系统的表中的时候,只是复制了数据内容的本身,而不会复制索引等信息。

三是这条语句使用具有局限性。一般情况下,这只能够在SQL Server数据库中采用。不过,对于SQL Server不同版本的数据库,如2008或者2003,还都是兼容的。若需要导入的对象数据库不是SQL Server的,则需要采用其他的方法。

四是采用这条语句的话,在目的表中必须不存在数据。否则的话,目的表中的数据会被清除。也就是说,这个语句不支持表与表数据的合并。在SQL Server中,有一条类似的语句,可以实现这个功能。这条语句就是:Insert Into。他的作用就是把另外一张表中的数据插入到当前表中。若用户想要的时表与表数据的合并,则可以采用这条语句。两者不能够混淆使用,否则的话,很容易导致数据的丢失。

五是以上两条语句都支持兼容的不同类型的数据类型。如在原标中,某个字段的数据类型是整数型,但是在目的表中这个字段的数据类型则是浮点型,只要这个两个数据类型本来就兼容的,则在导入的时候,数据库是允许的。

回答2:

  使用场景: 比如将 C:\Test\ 目录下的所有 txt文件内容 导入到 Table_1 中

  --定义临时表,用于存放获取的文件名称
  CREATE TABLE #files (name varchar(200) NULL, sql varchar(7000) NULL)
  --获取文件名称,存放在#files
  INSERT #files(name)
  exec master..xp_cmdshell 'dir c:\test /b'
  --删除不要的文件名称
  DELETE #files WHERE coalesce(name, '') NOT LIKE 'Code%'

  --插入需要 导入文件内容的 命令SQL,需要修改 Table_1(改为导入的Table)和文件路径

  UPDATE #files
  SET sql = 'BULK INSERT Table_1 FROM ''' + 'C:\Test\'+name + ''' WITH (' +
  'DATAFILETYPE = ''char'', FIELDTERMINATOR = ''\t'', ' +
  'ROWTERMINATOR = ''\n'')'

  --开始执行导入
  DECLARE @sql varchar(8000)

  DECLARE cur CURSOR STATIC LOCAL FOR
  SELECT sql FROM #files

  OPEN cur

  WHILE 1 = 1
  BEGIN
  FETCH cur INTO @sql
  IF @@fetch_status <> 0
  BREAK

  EXEC(@sql)
  END

  DEALLOCATE cur

  主要分为读取文件夹下所有文件和导入文件内容两部分
  --读取文件夹下所有文件
  declare @files table (ID int IDENTITY, FileName varchar(100))
  insert into @files execute xp_cmdshell 'dir c:\test /b'
  select 'c:\'+ [FileName] AS FILEPATH INTO #temp from @files
  SELECT * FROM #temp
  --导入文件内容
  BULK INSERT dbo.Table_1
  FROM #temp
  WITH
  (
  ROWTERMINATOR ='\n'
  )

  还需要开启
  /***** Step 1 开启 xp_cmdshell
  Use Master
  GO
  EXEC master.dbo.sp_configure 'show advanced options', 1
  RECONFIGURE WITH OVERRIDE
  GO
  EXEC master.dbo.sp_configure 'xp_cmdshell', 1
  RECONFIGURE WITH OVERRIDE
  GO
  *******/
  参考:
  http://social.msdn.microsoft.com/Forums/sqlserver/en-US/47c8edc1-8cad-4a24-a09a-3fc0c943325c/bulk-insert-multiple-files-tsql