Asp.net sql表更新问题

Asp.net sql表更新问题,asp.net,sql-server,web-services,Asp.net,Sql Server,Web Services,我有两张桌子 CREATE TABLE PODRAS_MS.tbl_FieldWorkers ( [FWInsOnServerID] INT NOT NULL IDENTITY(1,1), [BaseStationID] INT NOT NULL, [RefID] INT NOT NULL, [DisSubInsID] INT

我有两张桌子

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]、[Latitude]、[UpdateOn]字段的数据通过web服务。因此,我的问题是如何将值插入[FWInsOnServerID]字段,因为它不是通过webservice提供的,并且它是第一个表的引用

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

在这种情况下,您可以简单地返回第一个表的generated ID,并使用该结果插入到第二个表中

例如(如果您使用的是存储过程)


在存储过程的末尾。然后在处理数据库代码的.NET代码中,使用该数字进行第二次插入。

您可以在一个存储过程中完成这一切,如下所示:

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

我希望使用2个存储过程。您能给我一个示例,说明如何将第一个SP的返回值传递给第二个SP,以及如何在第二个SP中调用它。谢谢!是的,请看我的编辑。您必须传入可以在SP内设置的参数,然后在处理代码中读取该参数。有些人可能会建议使用返回值,但我建议您保存该值以进行错误/成功处理,当然您应该添加该值。;)
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