你如何同时插入两个表?

时间:2011-06-28 11:55:55

标签: c# asp.net sql

    StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO Threads(");//How can i modify that statement
sb.Append(" SELECT @Repuation, @WiningComment");
sb.Append(" FROM Users AS u");
sb.Append(" INNER JOIN Threads AS t ON t.UsersID=u.UsersID");
sb.Append(" WHERE t.ThreadsID=@ThreadID");

我有用户表和线程表。我想将@Reputation插入到users表中,将@winingComment插入到threads表中!我如何实现这一目标?

5 个答案:

答案 0 :(得分:7)

我建议你在TRANSACTION中做两个单独的INSERT

BEGIN TRANSACTION
INSERT [...]
INSERT [...]
COMMIT TRANSACTION

从技术上讲,交易可以保证您的请求的原子性。

答案 1 :(得分:2)

您将需要执行2个单独的INSERT语句,因为您无法同时将数据插入到2个表中。

答案 2 :(得分:2)

我认为你只会做两个单独的INSERT语句。如果你想确保这是一个原子操作(两者都插入或两者都没有插入),那么你可以将它们包装在一个事务中。提交事务时,插入是同时完成的。

希望有所帮助,

约翰

答案 3 :(得分:0)

你做不到。无论你怎么看,它们都必须是两个陈述。您可以使用触发器来模拟单个INSERT的感觉,但是IMO的代码闻起来很糟糕。

如果您只想在单个命令上发送语句,请使用分号终止第一个语句并将其作为一个批处理发送到SqlCommand

new SqlCommand("INSERT INTO Table1 (ID) SELECT 1; INSERT INTO Table2 (SomeField) SELECT 'Some value.';", some_db_connection).ExecuteNonQuery();

答案 4 :(得分:0)