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