0

SQL 2005

次のようなレイアウトのtPieceTableというテーブルがあります。

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

tPieceTableでは、「ID」はIDENTITY(1,1)です。

次のレイアウトの別のテーブル(tLiveTable)もあります。

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

私がやろうとしているのは、tPieceTableからtLiveTableにIDを挿入するストアドプロシージャを作成することです。ここで、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

ここで、INSERTと同時に、新しいレコードのTimeStampをGetDate()として更新し、LocationRefの場合は次のクエリの出力を挿入します。

SELECT ID FROM tLocationRefs WHERE Equipment = 'CHARGE_TABLE'

参考までに、tLocationRefsは次のようになります。

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

私が苦労しているのは、これらすべてを1つのINSERTに組み合わせる方法です。挿入に続いて2つのUPDATEを実行しようとしましたが、次のように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 に答える