sql表更新的问题

时间:2010-08-02 14:01:48

标签: asp.net sql-server web-services

我有2张桌子

CREATE TABLE PODRAS_MS.tbl_FieldWorkers
(
    [FWInsOnServerID]   INT             NOT NULL IDENTITY(1,1),
    [BaseStationID]     INT             NOT NULL,
    [RefID]         INT                     NOT NULL,
    [DisSubInsID]       INT             NOT NULL,   
    [FieldWorkerID]     CHAR(7)                 NOT NULL,
    [LastRecDate]       DATETIME                NOT NULL,
)
ALTER TABLE PODRAS_MS.tbl_FieldWorkers ADD CONSTRAINT PK_FieldWorkers_FWInsOnServerID PRIMARY KEY([FWInsOnServerID])
ALTER TABLE PODRAS_MS.tbl_FieldWorkers ADD CONSTRAINT FK_FieldWorkers_DisSubInsID FOREIGN KEY([DisSubInsID]) REFERENCES PODRAS_MS.tbl_DisasterSubInstances([SubInsID]) ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE PODRAS_MS.tbl_FieldWorkers ADD CONSTRAINT FK_FieldWorkers_BaseStationID FOREIGN KEY([BaseStationID]) REFERENCES PODRAS_MS.tbl_BaseStations([BaseStationID]) ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE PODRAS_MS.tbl_FieldWorkers ADD CONSTRAINT DF_FieldWorkers_LastRecDate DEFAULT(GETDATE()) FOR [LastRecDate]
GO

CREATE TABLE PODRAS_MS.tbl_FieldWorkerNodeGPSLocations
(
    [FWNStatID]         INT         NOT NULL IDENTITY(1,1),
    [FWInsOnServerID]           INT         NOT NULL,
    [Latitude]          DECIMAL(20,17)          NOT NULL,
    [Longitude]         DECIMAL(20,17)          NOT NULL,
    [UpdateOn]          DATETIME        NOT NULL,
)
ALTER TABLE PODRAS_MS.tbl_FieldWorkerNodeGPSLocations ADD CONSTRAINT PK_FieldWorkerNodeGPSLocations_FWNStatID PRIMARY KEY([FWNStatID])
ALTER TABLE PODRAS_MS.tbl_FieldWorkerNodeGPSLocations ADD CONSTRAINT FK_FieldWorkerNodeGPSLocations_FWInsOnServerID FOREIGN KEY([FWInsOnServerID]) REFERENCES PODRAS_MS.tbl_FieldWorkers([FWInsOnServerID]) ON UPDATE CASCADE ON DELETE NO ACTION
ALTER TABLE PODRAS_MS.tbl_FieldWorkerNodeGPSLocations ADD CONSTRAINT DK_FieldWorkerNodeGPSLocations_UpdateOn DEFAULT(GETDATE()) FOR [UpdateOn]
GO

两个表都通过第一个表中的Web服务进行更新,所有字段都可以通过Web服务插入,但在第二个表中,只有[Latitude],[Longitude],[UpdateOn]字段的数据来自webservice.so我的问题是如何将值插入[FWInsOnServerID]字段,因为它不是来自webservice及其对第一个表的引用???

2 个答案:

答案 0 :(得分:1)

如果我理解正确,第二个表中的插入取决于第一个表中插入的结果?

在这种情况下,您只需返回第一个表的生成ID,并使用该结果插入第二个表。

类似的东西(如果您使用的是存储过程)。

SELECT SCOPE_IDENTITY() 

在存储过程结束时。然后在处理数据库代码的.NET代码中,使用该编号进行第二次插入。

答案 1 :(得分:1)

您可以在单个存储过程中完成所有操作:

CREATE PROCEDURE PODRAS_MS.insert_FieldWorker()
   @BaseStationID INT,
   @RefID INT,
   @DisSubInsID INT,   
   @FieldWorkerID CHAR(7),
   @Latitude DECIMAL(20,17),
   @Longitude DECIMAL(20,17)
AS
BEGIN 

     INSERT INTO 
     PODRAS_MS.tbl_FieldWorkers 
     ([BaseStationID], [RefID], [DisSubInsID], [FieldWorkerID])
     VALUES (@BaseStationID, @RefID, @DisSubInsID, @FieldWorkerID)

     DECLARE @FWInsOnServerID INT
     SELECT @FWInsOnServerID = SCOPE_IDENTITY()

     INSERT INTO PODRAS_MS.tbl_FieldWorkerNodeGPSLocations 
     ([FWInsOnServerID], [Latitude], [Longitude])
     VALUES (@FWInsOnServerID, @Latitude, @Longitude)

END

然后,您可以从同一存储过程中选择记录,但更常见的是将其分成另一个存储过程。

编辑:使用输出参数

CREATE PROCEDURE PODRAS_MS.insert_FieldWorker()
   @BaseStationID INT,
   @RefID INT,
   @DisSubInsID INT,   
   @FieldWorkerID CHAR(7),
   @FWInsOnServerID INT output
AS
BEGIN 

     INSERT INTO 
     PODRAS_MS.tbl_FieldWorkers 
     ([BaseStationID], [RefID], [DisSubInsID], [FieldWorkerID])
     VALUES (@BaseStationID, @RefID, @DisSubInsID, @FieldWorkerID)

     SELECT @FWInsOnServerID = SCOPE_IDENTITY()

END