存储过程插入两个有关系的表?

2023-12-11

我试图将新行插入两个有关系的表中。我写的存储过程如下。

ALTER PROCEDURE InsertUserProfile
(
    @UserID varchar(10),
    @Pass varchar(50),
    @Enabled int,
    @Permission int,
    @Rank int,
    @FName varchar(50),
    @LName varchar(50),
    @Phone varchar(50),
    @Email1 varchar(50),
    @Email2 varchar(50)
)
AS

BEGIN TRANSACTION
INSERT INTO tbl_user_login VALUES (@UserID, @Pass, @Enabled, @Permission, @Rank)
IF @@ERROR <> 0
BEGIN 
    ROLLBACK
    RETURN
END


INSERT INTO tbl_user_profile VALUES (@FName, @LName, @Phone, @Email1, @Email2)
IF @@ERROR <> 0
BEGIN
    ROLLBACK
    RETURN
END

COMMIT

从此遵循 ASP.NET 代码

SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("dbo.InsertUserProfile", sqlConn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@UserID", DbType.String).Value = txtUserID.Text;
        cmd.Parameters.Add("@Pass", DbType.String).Value = txtPass.Text;
        cmd.Parameters.Add("@Enabled", DbType.Int32).Value = 1;
        cmd.Parameters.Add("@Permission", DbType.Int32).Value = Convert.ToInt32(ddlPermission.SelectedValue);
        cmd.Parameters.Add("@Rank", DbType.Int32).Value = Convert.ToInt32(ddlRank.SelectedValue);
        cmd.Parameters.Add("@FName", DbType.String).Value = txtFName.Text;
        cmd.Parameters.Add("@LName", DbType.String).Value = txtLName.Text;
        cmd.Parameters.Add("@Phone", DbType.String).Value = txtPhone.Text;
        cmd.Parameters.Add("@Email1", DbType.String).Value = txtEmail1.Text;
        cmd.Parameters.Add("@Email2", DbType.String).Value = txtEmail2.Text;

        sqlConn.Open();
        int rows = cmd.ExecuteNonQuery();
        sqlConn.Close();

但我收到以下错误。

INSERT 语句与 外键约束 “FK_tbl_user_profile_tbl_user_login”。 冲突发生在数据库“My 数据库位置”,表 “dbo.tbl_user_login”,“ID”列。这 声明已终止。

我是存储过程的新手,所以有什么建议我应该如何修复它以便我可以将数据插入两个表中?

表模式

tbl_user_login

ID (int) 
UserID (varchar10) 
Pass (varchar50) 
Enabled (int) 
Permission (int) 
Rank (int)

tbl_user_profile

ID (int)
FName (varchar50)
LName (varchar50)
Phone (varchar50)
Email1 (varchar50)
Email2 (varchar50)

@Richard它的“ID”是两个表中的自动增量。

具有自动增量(IDENTITY) 充当主键很好,但将其用作外键是危险的,因为您无法真正保证它们始终保持同步;任何回滚都可能导致它们损坏(回滚不会撤消身份增量,因为这会影响其他 SPID)。此外,两个并发之间的任何线程竞争INSERTs 将处于危险之中。

这里正确的做法是查询SCOPE_IDENTITY()在第一次插入之后,并在INSERT到第二张桌子;即在第二个表中你tell它的价值。请注意,自从@@ERROR and SCOPE_IDENTITY()是浮点值,您应该在第一个值之后直接查询它们INSERT:

SELECT @Error = @@ERROR, @NewId = SCOPE_IDENTITY()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储过程插入两个有关系的表? 的相关文章

  • 仅当列不为 NULL 时才连接列

    我有一个像这样的 SQL Server 表 PERSON NAME PHONE PHONE1 PHONE2 PHONE CONCAT Name1 12345 Null Null Null
  • Hive 中的 CASE 语句

    好的 我有以下代码来用二进制标志标记表中具有最高 Month cd 的记录 Select t1 month cd t2 max month cd CASE WHEN t2 max month cd null then 0 else 1 en
  • 在 SQLite GROUP BY 查询的 SELECT 列表中包含额外的列是否安全?

    我有一个简单的 SQLite 表 名为 message sequence INTEGER PRIMARY KEY type TEXT content TEXT 我想获取每种类型的最后一条消息的内容 由其序列确定 令我惊讶的是 以下简单查询有
  • 高级 MySQL:查找民意调查响应之间的相关性

    我有四个 MySQL 表 users 身份证号 姓名 polls ID 文本 options id poll id 文本 回应 id poll id 选项 id 用户 id 给定一个特定的民意调查和一个特定的选项 我想生成一个表格 显示其他
  • 存储过程 EXEC 与 sp_executesql 的区别?

    我写了两个存储过程 其中一个是sp executesql而其他没有 sp executesql 两者都正确执行相同的结果 我不明白两者之间有什么区别 EXEC SQL 与 EXEC sp executesql SQL N eStatus v
  • 获取每件商品的最新价格

    我有一张桌子 ItemID PurchaseDate Price 001 03 17 2013 19 00 002 03 17 2013 14 00 001 03 18 2013 13 00 002 03 18 2013 15 00 001
  • 在 SQL Server 2014 中使用带有事务的存储过程的 TransactionScope

    我正在使用 C 和 ADO NetTransactionScope在 ASP Net 应用程序中运行事务 该事务应该在多个表中保存一些数据 然后向订阅者发送电子邮件 Question 是否有效使用TransactionScope 当它包含对
  • 带可选参数的 SQL 更新命令?

    我将大约 500 000 个对象插入数据库 其中许多对象是相同的 在数据库中具有相同的主键表示 但其他字段可能不同 因此我使用方法 更新 如果没有行受影响 插入 问题是 有时一个对象的某些字段设置为 null 从文件中无法读取 并且已经在数
  • 使用存储过程并发访问MySQL数据库

    我有一个存储过程 它将读取然后增加数据库中的值 许多程序同时使用这个特定的过程 我担心并发问题 特别是读写器问题 有人可以建议我任何可能的解决方案吗 thanks 首先 正如另一篇文章中所述 使用 InnoDB 从 MySQL 5 5 开始
  • 在 SQL 中查询行序列

    假设我正在存储events有关联users如下表 其中dt代表事件的时间戳 dt user event 1 1 A 2 1 D 3 1 B 4 1 C 5 1 B 6 2 B 7 2 B 8 2 A 9 2 A 10 2 C 这样我们就可以
  • 如何使用存储过程 SQL SERVER 2008 R2(mssql) 插入 PHP 数组值

    我有这个数组 REV Array 0 gt 240 1 gt 241 2 gt 242 3 gt 243 4 gt 249 我现在使用下面的代码进行插入 将每个数组的元素存储在带有 id userID Type 和 Date 的行中 if
  • PDO 和 Microsoft SQL:必须声明表变量“@P1”

    我正在尝试使用 PDO 中的绑定从 Microsoft SQL 数据库中选择一些条目 我正在使用的代码看起来与我在文档中找到的代码类似 但是 当我运行它时 我收到以下警告 警告 PDOStatement execute pdostateme
  • 将 SQL 中的数据存储在数组中

    我正在尝试将 sql 数据库中的数据存储到数组中 目前我有这个 query mysql query SELECT FROM InspEmail WHERE Company LIKE company while row mysql fetch
  • 如何编辑表以启用级联删除?

    我有一个代表用户的表 当用户被删除时我得到 DELETE 语句与 REFERENCE 约束冲突 显然 CASCADE DELETE在SQL Server中并不像我想象的那么容易 需要将选项添加到表中 问题是 我不知道如何添加CASCADE
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • 左连接,左表中没有重复行

    请看下面的查询 tbl 目录 Content Id Content Title Content Text 10002 New case Study New case Study 10003 New case Study New case S
  • SQL Server:比较两个表中的列

    我最近完成了从某些应用程序的旧版本到当前版本的迁移 在迁移数据库时遇到了一些问题 我需要一个可以帮助我比较两个表中的列的查询 我的意思不是行中的数据 我需要比较列本身来弄清楚我错过了表结构的哪些变化 看一下红门 SQL 比较 http ww
  • 根据 SQL 查询的集合生成成员的“散点图”结果

    我有一个staff包含工作人员的数据库表 其中user no and user name列 我还有一个 department 包含员工可以加入的部门的表 其中dept no and dept name作为列 因为员工可以是多个部门的成员 所
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N

随机推荐

  • 处理列表

    我试图弄清楚如何处理这样的列表 4 6 7 1 2 4 6 10 4 2 4 1 这是一个由整数列表组成的列表 我希望我的函数将此列表作为输入并返回列表中不重复的整数列表 结果应该是 4 6 7 1 2 10 但我在弄清楚如何遍历它时遇到了
  • MySQL 查询语法帮助:错误 #1066 - 不唯一的表/别名

    我有四张桌子 user user billingprofile user shippingprofile and user address user 用户 ID 创建日期 用户计费配置文件 用户ID 地址 用户运输资料 用户ID 地址 用户
  • php 中的 !$page == false 还是 $page ?

    我看到下面的代码使用了 if page false 如果我使用 if page 有什么区别 if id check that page exists page dbRow SELECT FROM pages WHERE id id if p
  • 如何在 React Native 的 组件中插入换行符?

    我想在 React Native 的文本组件中插入一个新行 如 r n 如果我有
  • 如何在 Flink 中将 HashMap 附加到 Configuration 对象?

    我想分享一个HashMap跨 Flink 中的每个节点并允许节点更新该 HashMap 到目前为止我有这个代码 object ParallelStreams val env StreamExecutionEnvironment getExe
  • 如何用C#从oracle数据库填充数据集

    我正在尝试填充 oracle 数据集 NULL 我将其与带有 C 的 NET Framework 2 0 一起使用 这是一个 system data oracleclient 示例http msdn microsoft com en us
  • 如何为 IE、Firefox 和 Chrome 编写网络浏览器插件

    我需要编写一个支持 IE 7 Firefox 3 Chrome 的网络浏览器插件 该插件必须能够将 DirectX 对象放置在网页中 我没有使用插件的经验 我做了一些调查并决定使用 FireBreath 来实现 我无法理解如何将图像放置在插
  • 如何在 D3js 中动态添加图像到圆圈

    我很难弄清楚如何使用数据集中的链接将图像放置在圆圈内 我知道需要一种模式才能将图像添加到节点 related关于此主题的 SO 问题在介绍节点和数据之前附加了定义 图案和图像元素 就我而言 我找不到在选择器函数内附加标签的方法 因为数据是动
  • 如何覆盖testNG中的index.html报告

    我有一个场景 需要将一些自定义消息添加到 index html testNG 报告中 有什么办法可以做到这一点吗 我刚刚创建了一个自定义注释 我想像 DataProvider 一样将其发布到 index html testNG 报告中 到目
  • 将 ImageView 放在布局中的 ImageView 上 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我创建了一个 Android 应用程序 我想将 ImageView 放在 ImageView 上 如何让我成为可能 Thanks 我已经为你创建了代码 请看这是 XML 代码
  • f2py:包装 fortran 模块,该模块利用分布在不同文件中的子例程?

    由于我描述的原因earlier 我需要在Python中使用LAPACKs dgesvd和zgesvd方法 而不是包装在numpy中的方法 有人指出 我可以使用 f2py 来创建我自己的 python 包 问题是 lapack 中的 dges
  • 重写函数类型原型

    我在玩耍并试图覆盖时遇到了一个有趣的行为Function原型 假设我们已经像这样重写了 toString const funcToString Function prototype toString Function prototype t
  • 清理 Oracle 序列

    我广泛使用 SQL Server 但对 Oracle 的经验很少 我接到的任务是 清理 Oracle 数据库中的序列 但我不知道如何安全地完成此任务 我需要确定表中实际的最大值 假设 ID 105 然后查看该 ID 的下一个序列是什么 如果
  • fontello 中的图标字体不适用于 Meteor js

    我已经从 fontello 下载了自定义图标字体 并打算在我的流星应用程序中使用它 我尝试了下载包附带的演示 字体显示正常 这是我的CSS font face font family fontello src url fonts fonte
  • iOS 应用程序:几次崩溃,常见主题为:SIGSEGV 和 _sigtramp

    作为 obj c 的新手 我不擅长阅读堆栈跟踪 但我通常可以找出代码中从哪里开始查找 然而 在测试过程中 其中一位测试人员不断报告多次随机崩溃 我无法确定堆栈跟踪的头或尾 因为它们不指向我自己的任何代码 这里有两个 0 WIT Free 0
  • 如何在 Swift 中将枚举和 switch() 与 UITableViewController 结合使用

    我的 UITableView 有两个部分 所以我为它们创建了一个枚举 private enum TableSections HorizontalSection VerticalSection 如何使用在 numberOfRowsInSect
  • Android Automotive Arm_86 未在虚拟设备中列出

    我一直在开发 Android 汽车应用程序 但由于未知原因尚未设置模拟器 我已经尝试过文档并且this我正在使用金丝雀频道 下载汽车图像后 它没有列在虚拟设备下 我使用的是android studio 4 0 1版本 如何解决这个问题 谢谢
  • 如何在网站上添加实时代码编辑器? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在创建一个需要实时编辑代码 Java c python javascript 等 的网站 我知道 codemirror 我想知道如何在网站上运行代码 例如 W3Schools 自己
  • 矢量 a 、矢量 a[n] 和矢量 a(n) 之间有什么区别?

    我刚刚了解了向量 但对它们的用途感到困惑 请告诉我以下之间有什么区别 vector
  • 存储过程插入两个有关系的表?

    我试图将新行插入两个有关系的表中 我写的存储过程如下 ALTER PROCEDURE InsertUserProfile UserID varchar 10 Pass varchar 50 Enabled int Permission in