【问题标题】:One Stored Procedure to insert one table and retrieve ID and insert multiple tables一个存储过程插入一个表并检索ID并插入多个表
【发布时间】:2012-07-10 00:14:00
【问题描述】:

我有 3 个表格和列。例如:绿色(用户 ID、姓名、地址)、红色(用户 ID、临时地址)、蓝色(用户 ID、WorkPlace)。

我想在用户 ID 是自动递增的 int 和唯一 ID 时将数据插入 Green。插入这些详细信息后,希望检索用户 ID 并在一个存储过程中插入红色和蓝色表中

注意:此示例表是为了展示一个示例场景,不适合实际使用...

【问题讨论】:

    标签: sql-server tsql stored-procedures


    【解决方案1】:

    SQL 有一个非常好的 OUTPUT 特性。

    在这种情况下,使用自动递增的 int 或默认值(例如 newid())指定您的标识列,执行插入操作,然后将输出用作其他输入查询的输入。

    输出表包含刚刚插入的所有值,并且可以像任何其他表一样查询,不同之处在于它在提交后立即提供您的新值。

    INSERT INTO 
    tblInsertedID(ID) 
    SELECT * FROM
        (INSERT 
        INTO tblDir(Dir) 
        OUTPUT inserted.ID 
        VALUES ('C:\NewDir\')
        ) InnerTable
    

    【讨论】:

    • 如何使用OUTPUT 随后插入两个不同的表?您不能,您需要将输出填充到表变量中,或者,如果原始插入只是单行,则只需使用 SCOPE_IDENTITY() 和单个变量。
    【解决方案2】:
    DECLARE @userID INT;
    INSERT dbo.Green(Name, Address) SELECT @name, @address;
    SELECT @userID = SCOPE_IDENTITY();
    INSERT dbo.Red(UserID, TemporaryAddress) SELECT @userID, @something;
    INSERT dbo.Blue(UserID, WorkPlace) SELECT @userID, @something_else;
    

    【讨论】:

      【解决方案3】:

      使用 SCOPE_IDENTITY() 将值插入到用户的变量中,然后在红/蓝表中使用此变量值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 2021-06-12
        • 2020-08-19
        • 2013-07-31
        • 1970-01-01
        • 2017-08-02
        • 1970-01-01
        相关资源
        最近更新 更多