2017-05-25 35 views
0

我在我们的ERP系统中有一个跟踪订单状态的表。它具有代码1-6的开放日期(列名称ORGDUE_10)和状态列(STATUS_10),并且状态3是未决订单,状态4已关闭(其余代码对此应用无关紧要)。不幸的是,这张表没有时间戳列,我可以得到订单关闭时的日期。我需要确定是否按时或者是否超过了截止日期(ORGDUE_10),是否关闭了多个Shop Orders(STATUS_10从3更改为4)。用于添加时间戳的SQL查询

任何想法如何我可以做一个查询,将完成此?我假设我需要另一个表 - 将数据写入它然后触发某种类型?

我正在使用VS2015。我无法编辑的表名是Order_Master

STATUS_10  ORDNUM_10 PRTNUM_10  CURDUE_10 
4   | 50015246 |ASY5670 | 9/4/2017 
3   | 50016983 |ASY5699 | 5/15/2017 
+1

基本上,您需要一个记录结束日期的表格 - 可以修改'表格'来添加合适的列,也可以创建'其他表格'来保存工单号和结束日期,插入到由主表上的触发器驱动的状态中,以检测状态何时变为4.请注意,表格具有名称 - 如果您不能引用真正具有的名称,则假名(例如SHOP_ORDERS)。无论如何,令人惊讶的是(无论如何),人们提出SQL问题的频率并不提供表名。 –

+0

@Jonathon Leffler,感谢您的快速回复。我无法编辑的表名是Order_Master。我创建了第二个称为SO_Status的表和列状态(nchar10),CurDue(日期),并添加了Comp_Date(日期)。对于在原始问题中遗漏这些细节,我深表歉意。 –

+0

你并不是唯一缺少这样的信息 - 这是一个常见的问题。目前我还不确定是否需要帮助来创建触发器,或者现在创建触发器时从两个表中选择创建SQL。你的样品数据有'CURDUE_10';你的文字提到'ORGDUE_10'而不是'CURDUE_10'。我认为你需要为第二个表提供一些示例数据 - 最好有一些过期的行和一些没有的行,以及来自'Order_Master'的相应数据。有预期的产出会很有用。 (MCVE - [MCVE])。 –

回答

0

我想通了(我认为)。这里是我使用的代码,似乎可以做到这一点。此代码将在两台不同的服务器上更新,插入和有条件地记录时间戳(datestamp)两个不同的表。我希望这是有道理的,并帮助别人。感谢@Jonathan Leffler给予的帮助,对不起,我没有让你轻松。

MERGE server2.dbo.table2 AS target /* the added server.dbo is in the event the two tables are 
on different sql servers*/ 
USING server1.dbo.table1 AS source ON (target.column-t = source.column-s) /* 
column-t is the target column and column-s is the matching source column */ 
WHEN MATCHED AND (conditional column) AND (antoher conditional column) THEN 
UPDATE SET 
    column-t = source.column-s, column-t (for datestamp) = (GETDATE()) 
WHEN NOT MATCHED AND (conditional column) AND (antoher conditional 
column)THEN  /* you cannot use a WHERE clause in a MERGE but you can set 
up similar conditions in the WHEN statements */ 
INSERT (target columns) 
VALUES (source columns in same order as target columns);