SQL Server – 清除和填充Excel

我需要将数据从SQL Server 2014推送到Excel工作表中。 由于纸张不会改变,我需要先清理纸张。

我的查询是在底部。

– 由于这种性质,我不能简单地将数据拉到Excel中。

UPDATE似乎locking了Excel文件。 我可以多次运行插入没有问题,但更新防止进一步的操作实际上更改文件。

  1. 运行更新:成功,工作表被清除
  2. 运行INSERT: 失败 SQL执行时没有错误,但文件未被填充

码:

UPDATE OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Workspace\WorkBook01.xlsx', 'SELECT col_01, col_01 FROM [Sheet1$]') SET col_01 = NULL, col_02 = NULL WHERE col_01 IS NOT NULL; INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Workspace\WorkBook01.xlsx', 'SELECT col_01, col_02 FROM [Sheet1$]') SELECT col_01, col_01 FROM [dbo].[table_data]; 

编辑 – 其他细节代码的使用是由于需要完成的任务的性质(文件结构没有被我定义,但我需要使用它)。 要求如下:

  1. 有超过30个.xlsx文件,所有这些文件都有3个或更多的表单
  2. 横跨工作表的行参考存储在每个文件(不是外部参考)中的“主数据”
  3. 主数据表必须具有直接插入的值(例如,不引用外部源)

我需要更新所有文件的“主数据”表(不使用外部参考)。 使用上面的代码是因为我可以快速编写SQL来对所有文件执行此操作。

– 我知道如果“主表”只是简单地从数据库中提取数据,或者它们都引用了一个外部文件,这将变得更加容易…这不是我的电话,但我确实需要维护表。

答案是两倍。 底线是我无法做到的。

  1. 行不能通过OPENROWSET删除
  2. 将行的值设置为NULL (空string默认为NULL )会导致插入数据的下一个插入出现问题(在SQL中未引发警告)。

这在这里进一步介绍: SQL Server:DELETE FROM OPENDATASOURCE

– 链接中接受的答案表示行可以“空白”; 但是,以我的经验,这会导致与下一个INSERT错误。

UPDATEINSERT之前使用SELECT FROM OPENROWSET(...)来更精确地查看分配的值,而不是在Excel中可见(Excel将NULL显示为空行)。

我无法理解为什么你会采取这种复杂的方法。 您只需要以CSV格式导出数据,然后使用File-> Open将其读入Excel。 需要注意的一点是,Excel会指定一个初始行,用于指定列名 – 再次用引号和逗号分隔:如果不存在,Excel将简单地静静地丢弃数据的第一行。

所以,你真正需要做的是:

SPOOL'wherever.xls'
SELECT DISTINCT(“\”col1name \“,\”col2name \“,\”col3name“)FROM <anyTableWillDo>;
SELECT“\”“,col1name,”\“,\”“,col2name,”\“,\”“,col3name,”\“”FROM <yourSubjectTable>;
SPOOL OFF;

对不起,如果我应该把这个评论而不是答案,但我没有足够的分数。 我不认为你的逻辑有什么问题,看起来像NULL的更新正在做一些奇怪的内容。 我用excel打开,然后清除单元格。 插入工作完美。

我使用select来查看更新后的单元格内容为NULL,单元显示为NULL。 然后,我无法让插入后工作。

 select * from openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\junk\test.xlsx;', 'SELECT * FROM [Sheet1$]')