我有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及其对第一个表的引用???
答案 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