Как вы вставляете в две таблицы одновременно? - PullRequest
1 голос
/ 28 июня 2011
    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 в таблицу пользователей и @winingComment в таблицу потоков !! Как мне этого добиться?

Ответы [ 5 ]

7 голосов
/ 28 июня 2011

Я бы посоветовал вам сделать 2 отдельных ВСТАВКИ в СДЕЛКУ

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

Технически транзакция гарантирует атомарность ваших запросов.

2 голосов
/ 28 июня 2011

Я думаю, что вы просто сделали бы два отдельных оператора INSERT. Если вы хотите убедиться, что это атомарная операция (либо обе, либо ни одна из них не вставлена), вы можете заключить их в транзакцию. Когда транзакция зафиксирована, вставки выполняются одновременно.

Надеюсь, это поможет,

John

2 голосов
/ 28 июня 2011

Вам нужно будет сделать 2 отдельных оператора INSERT, поскольку вы не можете вставить данные в 2 таблицы одновременно.

0 голосов
/ 28 июня 2011

Использование оператора слияния Sql 2008 может помочь в выполнении операций с несколькими таблицами.

Проверьте один раз

http://blog.sqlauthority.com/2008/08/28/sql-server-2008-introduction-to-merge-statement-one-statement-for-insert-update-delete/

http://technet.microsoft.com/en-us/library/bb510625.aspx

0 голосов
/ 28 июня 2011

Вы не можете. Они должны быть двумя утверждениями независимо от того, как вы на это смотрите. Вы можете использовать триггер, чтобы эмулировать ощущение выполнения одного INSERT, но у него очень неприятный запах кода IMO.

Если вы просто хотите отправить операторы по одной команде, завершите первую точку с запятой и отправьте ее как один пакет в SqlCommand.

new SqlCommand("INSERT INTO Table1 (ID) SELECT 1; INSERT INTO Table2 (SomeField) SELECT 'Some value.';", some_db_connection).ExecuteNonQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...