【问题标题】:update two tables with one Store Procedure in SQL server?在 SQL Server 中使用一个存储过程更新两个表?
【发布时间】:2012-05-16 03:50:26
【问题描述】:

当我尝试在一个存储过程中更新两个表时遇到问题我得到了 SqlException 有人可以帮我吗

INSERT 语句与 FOREIGN KEY 约束“FK”冲突。 数据库“”,表“dbo.Users”,列中发生冲突 '用户身份'。声明已终止。

ALTER PROCEDURE  [dbo].[CreateProject]
    @ProjectID UNIQUEIDENTIFIER,
    @UserID UNIQUEIDENTIFIER,
    @ProjectName NVARCHAR(50),
    @Description NTEXT,
    @EstStartDate DATETIME,
    @EstEndDate DATETIME,
    @StatusID SMALLINT,
    @Priority SMALLINT

AS 

INSERT INTO DBO.Projects VALUES 
(@ProjectID,@ProjectName,GETDATE(),@Description,@EstStartDate,@EstEndDate,@StatusID,@Priority)


INSERT INTO Users_projects VALUES 
(@ProjectID,@UserID)

【问题讨论】:

  • 消息很清楚,您正在尝试在表 Users_projects 上插入一个 UserId,而该表上不存在 dbo.Users
  • 您是否插入了用户?否则,请确保将右列作为用户表的 FK 引用。
  • 如果您在一个 proc 中进行多次插入,如果您有任何一个语句失败,则需要使用显式事务并回滚所有操作。否则,您会使数据库处于不一致的状态。也可以为此使用 TRY catch 块,并在 catch 块中返回错误消息,这将有助于稍后进行故障排除。

标签: sql


【解决方案1】:

问题在于 UserID 的外键。您需要先将 UserId 插入到 Users 表中。几点提示:“createProc”过程通常应该创建 ProjectId 并作为 OUTPUT 参数返回。此外,您可能希望使用用户名作为输入参数并让 proc 查找 UserId。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 2013-03-26
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多