Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
从Excel列进行SQL更新_Sql_Sql Update - Fatal编程技术网

从Excel列进行SQL更新

从Excel列进行SQL更新,sql,sql-update,Sql,Sql Update,每次从制造设备捕获数据时,我都需要用Excel表中的当前作业信息更新SQL表,我可以通过创建一个存储过程来实现这一点,我可以使用一个JScript来执行该存储过程,该JScript由捕获数据的程序运行,并将其写入数据库 我现在可以很好地查询Excel工作表并查看所需的数据,但格式有点问题,不需要运行查询来逐行分隔数据,然后进行一次更新,我想不出如何更新它 查询工作表: SELECT Item, L05, L08, L09, SS1, SS2, SS3 FROM ( SELECT RO

每次从制造设备捕获数据时,我都需要用Excel表中的当前作业信息更新SQL表,我可以通过创建一个存储过程来实现这一点,我可以使用一个JScript来执行该存储过程,该JScript由捕获数据的程序运行,并将其写入数据库

我现在可以很好地查询Excel工作表并查看所需的数据,但格式有点问题,不需要运行查询来逐行分隔数据,然后进行一次更新,我想不出如何更新它

查询工作表:

 SELECT Item, L05, L08, L09, SS1, SS2, SS3
 FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY F8) AS rownumber, F1 AS Item, F2 AS L05, F3 AS L08, 4 AS L09, F5 AS SS1, F6 AS SS2, F7 AS SS3
    FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0',
    'Data Source="C:\Job.xlsx";Extended Properties="Excel 12.0 XML;HDR=NO";')..."'Job Details$'") AS T2
  Where rownumber >= 5 AND rownumber<=8
每个设备行是一列,每个数据项是工作表中的一行,我需要引用这些值并更新到如下表:

LINE      WO      TE      TF      Qty
Line05    NULL    NULL    NULL    NULL
Line08    NULL    NULL    NULL    NULL
Line09    NULL    NULL    NULL    NULL
SS1       NULL    NULL    NULL    NULL
SS2       NULL    NULL    NULL    NULL
SS3       NULL    NULL    NULL    NULL

理想情况下,由于工作表是固定的,我可以在update语句中单独引用Excel单元格,但如果可能的话,我还没有找到这样做的方法。

您可以使用以下方法:

select *
from
(
  select item, value, line
  from
  (
    <yourquery>
  ) x
  unpivot
  (
    value
    for line in (L05, L08, L09,
                SS1, SS2, SS3)
  ) unpiv
) src
pivot
(
  max(value)
  for item in ([WO], [TE], [TF], [QTY])
) piv
选择*
从…起
(
选择项目、值、行
从…起
(
)x
unpivot
(
价值
对于线路输入(L05、L08、L09、,
SS1、SS2、SS3)
)unpiv
)src
支点
(
最大值
对于库存物料([WO]、[TE]、[TF]、[QTY])
)piv

请参见

@bluefeet这项工作使事情的顺序正确,但所有的值都是空的,我结束了对问题的思考,没有用T-SQL重新安排所有内容,而是在工作簿中创建并隐藏了一个新的Excel工作表,其中的单元格按照我需要的顺序链接到原始工作表,然后又问了这个问题


谢谢大家的帮助。

啊,所以你需要创建一个交叉选项卡。。。如果我没记错的话,在sql server中做这件事并不简单。@BrianDriscoll不能说我曾经尝试过,但我一回来就会进行研究。很抱歉,我还没有机会尝试一下,我的新家还没有ISP,明天早上我会在办公室尝试一下。
select *
from
(
  select item, value, line
  from
  (
    <yourquery>
  ) x
  unpivot
  (
    value
    for line in (L05, L08, L09,
                SS1, SS2, SS3)
  ) unpiv
) src
pivot
(
  max(value)
  for item in ([WO], [TE], [TF], [QTY])
) piv