插入 SQL 命令,其中包含两个相关表

本文关键字:包含两 SQL 命令 插入 | 更新日期: 2023-09-27 17:56:10

我的网站中有 3 个表。

  1. 用户
  2. 线程
  3. 评论

我将评论主键连接到线程评论字段。我想在将注释馈送到特定线程时使用插入命令。

如何编写命令?!?

是这样的:

 string myCommand="INSERT INTO [Threads].[Comments] VALUES(....";

消息是否会插入到特定线程中?如果我想同时向两者插入数据怎么办。例如,主题的标题和评论的日期...我可以将两个命令合并为一个吗?

插入 SQL 命令,其中包含两个相关表

您已经从后到前设置了外键,如果线程表中有一个链接到注释表主键的外键,则一个注释可以与多个线程相关,但一个线程只能有一个注释。

您必须

创建两个单独的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() 每条评论建议。 谢谢!