0

SQL 2005

我有一个名为 tPieceTable 的表,其布局如下:

ID   BatchNo    PieceNo
-----------------------
1    abc        123
2    xyz        321

在 tPieceTable 中,“ID”是一个 IDENTITY(1,1)。

我还有另一个表格(tLiveTable),它具有以下布局。

ID   TimeStamp  LocationRef
---------------------------

我要做的是创建一个存储过程,它将 tPieceTable 中的 ID 插入到 tLiveTable 中,其中 BatchNo 等于 @BatchNo 并且 PieceNo 等于 @PieceNo (这些是存储过程的参数)。

我有以下似乎正在工作:

CREATE PROCEDURE spSetLocationChargeTable
  @BatchNo nvarchar(50),
  @PieceNo nvarchar(50)
AS
  INSERT INTO tLiveTable(PieceID)
  SELECT ID FROM tPieceTable
  WHERE tPieceTable.BatchNo = @BatchNo AND tPieceTable.PieceNo = @PieceNo
GO

现在,在插入的同时,我想将新记录的时间戳更新为 GetDate(),对于 LocationRef,我想插入以下查询的输出:

SELECT ID FROM tLocationRefs WHERE Equipment = 'CHARGE_TABLE'

作为参考 tLocationRefs 看起来像这样:

ID   Equipment     Description
------------------------------
0    CHARGE_TABLE  Charger Machine Table

我苦苦挣扎的地方是如何将所有这些结合到一个 INSERT 中。我尝试进行插入,然后进行两次更新,但我无法引用 tPieceTable,例如使用以下内容:

CREATE PROCEDURE spSetLocationChargeTable
  @BatchNo nvarchar(50),
  @PieceNo nvarchar(50)
AS
  INSERT INTO tLiveTable(PieceID)
  SELECT ID FROM tPieceTable
  WHERE tPieceTable.BatchNo = @BatchNo AND tPieceTable.PieceNo = @PieceNo

  UPDATE tLiveTable
  SET TimeStamp = GetDate()
  WHERE tPieceTable.BatchNo = @BatchNo AND tPieceTable.PieceNo = @PieceNo

  UPDATE tLiveTable
  SET LocationRef = (SELECT ID FROM tLocationRefs WHERE Equipment = 'CHARGE_TABLE')
  WHERE BatchNo = @BatchNo AND PieceNo = @PieceNo
GO

我得到:-

“找不到多部分标识符“tPieceTable.BatchNo”。” “找不到多部分标识符“tPieceTable.PieceNo”。”

感谢大家的任何帮助。

4

1 回答 1

1
INSERT  INTO tLiveTable
        (PieceID, TimeStamp, LocationRef)
SELECT  ID 
,       getdate()
,       (
        SELECT  ID 
        FROM    tLocationRefs 
        WHERE   Equipment = 'CHARGE_TABLE'
        )
FROM    tPieceTable  
WHERE   tPieceTable.BatchNo = @BatchNo
        AND tPieceTable.PieceNo = @PieceNo
于 2012-12-03T15:32:41.680 回答