【问题标题】:SQL Import and Export WizardSQL 导入和导出向导
【发布时间】:2015-05-05 01:08:58
【问题描述】:

我需要将 Excel 文件导入 SQL Server 2012 数据库。它将每月包含大约 12,000 行。我知道我可以使用向导来执行此任务,但如果它们与正在导入的数据的 ID 号匹配,我想从目标表中删除这些行。

我能否将数据导入临时表,然后通过向导在一个脚本中进行匹配/删除?

我应该考虑另一种方法吗?

谢谢

【问题讨论】:

  • 好吧,你可以创建一个“原始表”,然后插入到目标表中,然后截断原始表。或者有一些方法可以直接使用 SQL 访问 Excel。或者你可以创建一个 SSIS 包来为你做这件事。或者您可以创建一个触发器,请记住,默认情况下插入触发器在您使用导入导出向导时不会触发,因此您必须为此更改设置。
  • 我想你找SSIS会更容易些。您可以轻松做到这一点

标签: sql-server excel sql-server-2012


【解决方案1】:

实际上有一种方法可以像查询表格一样查询 Excel 文件,它可以让您轻松完成您所描述的操作。话虽如此,要让它发挥作用还需要做一些初步的工作。

为了这个解释,我使用 xlsx 文件(使用 Excel 2013 创建)在本地进行了测试,其中包含一个带有两列的单张表 Sheet1,第一行包含列名 Field1Field2

这是我目前能做的。

--SELECT from Sheet1 into a local temp table
SELECT * INTO #TempTable
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml;
   Database=C:\Users\pwalton\Documents\test.xlsx',
   [Sheet1$]);

--Clear out the original records
DELETE FROM TestImportTable
WHERE Field1 IN (SELECT Field1 FROM #TempTable)

--Insert the new ones
INSERT INTO TestImportTable
SELECT * FROM #TempTable

--Get rid of the evidence!
DROP TABLE #TempTable

这是我需要做的事情。

  1. 我下载并安装了2007 Office System Driver: Data Connectivity Components

  2. 我必须使用以下命令启用临时查询。

    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE
    GO
    EXEC sp_configure 'ad hoc distributed queries', 1
    RECONFIGURE
    GO
    
  3. 我必须确保以系统管理员身份运行 SQL Server Management Studio。就我而言,我需要移动右键单击并以管理员身份运行。如果您处于更受管理的环境中,请与您的网络管理员合作以获得正确的权限。

这应该就是你所需要的。同样,我在本地对此进行了测试,上面列出的每个项目都需要克服过程中的特定错误。

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2023-02-26
    相关资源
    最近更新 更多