【问题标题】:problem with sql table updationsql表更新问题
【发布时间】:2010-08-02 14:01:47
【问题描述】:

我有两张桌子

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] 字段,因为它不是通过网络服务来的,它是第一个表的参考???

【问题讨论】:

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


    【解决方案1】:

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

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

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

    SELECT SCOPE_IDENTITY() 
    

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

    【讨论】:

      【解决方案2】:

      您可以像这样在一个存储过程中完成所有操作:

      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 中设置的参数,然后在您的处理代码中读取它。有些人可能会建议一个返回值,但我建议您将其保存以进行错误/成功处理,您当然应该添加它。 ;)
      猜你喜欢
      • 2012-02-25
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多