使用两个相关表插入SQL命令

时间:2011-05-12 16:26:03

标签: c# asp.net sql

我的网站上有3张桌子。

  1. 用户
  2. 主题
  3. 评论
  4. 我将注释主键连接到“线程注释”字段。我想在向特定线程提供注释的同时使用insert into命令。

    我如何编写命令?!?

    是这样的:

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

    将消息插入特定线程吗? 如果我想同时向两者插入数据怎么办?一个帖子的标题和评论的日期...我可以将两个命令组合成一个吗?

5 个答案:

答案 0 :(得分:1)

您必须创建两个单独的INSERT语句。您可以将它们包装在事务中,以确保它们都不会被提交,除非它们都成功。

答案 1 :(得分:1)

您已将外键设置为前置,如果您在threads表中有一个链接到comments表的主键的外键,则一个注释可以与多个线程相关,但一个线程只能有一个注释

答案 2 :(得分:1)

你仍然需要两个INSERT语句,但听起来你想要从第一个插入中获取IDENTITY并在第二个插入中使用它,在这种情况下,你可能想要查看OUTPUT或OUTPUT INTO:{{3} }

(我对之前提出的同一问题的回答:http://msdn.microsoft.com/en-us/library/ms177564.aspx

答案 3 :(得分:0)

使用两个命令插入“线程和注释”。首先插入Threads并获取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()。谢谢!

答案 4 :(得分:0)

我创建了一个存储过程,并将两个插入放入SP中的一个事务中。您可以使用@@SCOPE_IDENTITY从插入中获取ID到线程中,并将其插入到注释表中:

INSERT INTO [Threads] (...

INSERT INTO [Comments]
SELECT 
     @@SCOPE_IDENTITY,
     OtherValues ...

您可以使用前面所述的transaction来使其更加强大。使用SQL命令从C#代码调用SP。