插入 SQL 命令,其中包含两个相关表
本文关键字:包含两 SQL 命令 插入 | 更新日期: 2023-09-27 17:56:10
我的网站中有 3 个表。
- 用户
- 线程
- 评论
我将评论主键连接到线程评论字段。我想在将注释馈送到特定线程时使用插入命令。
如何编写命令?!?
是这样的:
string myCommand="INSERT INTO [Threads].[Comments] VALUES(....";
消息是否会插入到特定线程中?如果我想同时向两者插入数据怎么办。例如,主题的标题和评论的日期...我可以将两个命令合并为一个吗?
您已经从后到前设置了外键,如果线程表中有一个链接到注释表主键的外键,则一个注释可以与多个线程相关,但一个线程只能有一个注释。
您必须
创建两个单独的INSERT
语句。您可以将它们包装在事务中,以确保除非它们都成功,否则两者都不会提交。
您仍然需要两个 INSERT 语句,但听起来您希望从第一个插入中获取 IDENTITY 并在第二个插入中使用它,在这种情况下,您可能希望查看 OUTPUT 或 OUTPUT 到: http://msdn.microsoft.com/en-us/library/ms177564.aspx
(我对之前问过的同一个问题的回答:SQL Server:是否可以同时插入到两个表中?
我会创建一个存储过程,并将两个插入放入 SP 中的一个事务中。您可以使用 @@SCOPE_IDENTITY 从插入到线程中获取 ID,并在插入到注释表中使用它:
INSERT INTO [Threads] (...
INSERT INTO [Comments]
SELECT
@@SCOPE_IDENTITY,
OtherValues ...
您可以使用前面所述的事务来使其更加健壮。使用 SQL 命令从 C# 代码调用 SP。
使用两个命令插入到线程和注释中。 首先插入到线程中并获取 id:
string myCommand = "INSERT INTO [Threads] (...";
// execute
string myCommand = "SELECT SCOPE_IDENTITY()";
// execute - put in thread ID
然后使用话题 ID 插入到注释中
string myCommand = "INSERT INTO [Comments] (" + ThreadID + "...";
在单个 INSERT 命令中以某种方式完成此操作没有真正的价值或意义。
编辑 @@IDENTITY更改为 SCOPE_IDENTITY() 每条评论建议。 谢谢!