簡體   English   中英

如何編寫用於將值插入多個表的存儲過程

[英]How to write a stored procedure for insert value into multiple tables

兩張桌子

tblClass  - ClassID {PK} , ClassName
tblOperation - OperationID {PK} , OperationName , ClassId

這些參數來自客戶端:

 @OperationName VARCHAR ,
 @ClassName VARCHAR  ,
 @UserID int

我想先檢查tblClass,如果類名不存在,則應將類名添加到表中。

之后,要檢查tblOperation並檢查類ID和操作名稱(如果沒有)必須插入。 誰可以幫我這個事。

DECLARE @ClassCount AS TINYINT,
DECLARE @OperationCount AS TINYINT,
DECLARE @ClassID AS BIGINT

SELECT @ClassCount = COUNT(ClassName), @ClassID = ClassID  FROM tblClass WHERE ClassName = @ClassName 

IF(@ClassCount = 0)
BEGIN
INSERT INTO tblClass VALUES (@ClassName)
SELECT ClassID FROM tblClass WHERE ClassName = @ClassName
END

SELECT @OperationCount = COUNT(OperationName) FROM tblOperation WHERE OperationName = @OperationName

IF(@OperationCount = 0)
BEGIN
INSERT INTO tblOperation VALUES (@OperationName,@ClassID)
END

我假設您將檢查該值是否存在,然后對其進行更新,如果不存在,則將其插入。

這是一些入門代碼,助您一臂之力:)我還沒有為您完成全部工作。

操作以下內容以獲取所需的內容。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE NameOfStoredProc 
    -- Add the parameters for the stored procedure here
     @OperationName VARCHAR ,
     @ClassName VARCHAR  ,
     @UserID int
AS
IF EXISTS (SELECT ClassName FROM  tblClass WHERE ClassName = @ClassName)
BEGIN
    --UPDATE HERE
    --UPDATE TblClass SET ClassID = ###, ClassName = ### WHERE ?
    --UPDATE TblOperation SET OperationID  = ###, OperationName  = ###, ClassId - ### WHERE ?
END
ELSE
BEGIN
   -- INSERT HERE
   --INSERT INTO tblClass
   --INSERT INTO tblOperation
END
CREATE PROCEDURE sp_InsertClassOperation
   @OperationName VARCHAR(100),
   @ClassName VARCHAR(100),
   @UserID INT

AS

IF NOT EXISTS (SELECT * FROM tblClass WHERE ClassName = @ClassName)
BEGIN
   INSERT INTO tblClass(ClassName) VALUES (@ClassName)
   DECLARE @ClassId INT = (SELECT ClassId FROM tblClass WHERE ClassName = @ClassName)

   IF NOT EXISTS (SELECT * FROM tblOperation WHERE OperationName = @OperationName AND ClassId = @ClassId)
   BEGIN
      INSERT INTO tblOperation(OperationName, ClassId) VALUES (@ClassId)
   END
END

試試這個概念:

  1. 在tblClass中運行更新查詢

    更新tblclass設置...,其中classname ='something'

  2. 檢查是否有任何受影響的行,如果沒有受影響的行,請運行插入查詢

    如果@@ RowCount = 0
    插入tblclass(...)值(....)

  3. 接下來運行tblOperation的更新查詢

    更新tblOperation設置classId = @@ Identity,...其中bla bla bla

  4. 檢查是否有任何受影響的行,如果沒有受影響的行,請運行插入查詢

    如果@@ RowCount = 0
    插入tblOperation(...,classId)值(...,@@ Identity)

在SQL中,是否有另一種方法可以在添加記錄之前查看記錄是否已經存在? 了解更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM