копирование связанных данных с использованием CTE в пределах одного SP? - PullRequest
0 голосов
/ 26 июня 2009

Я должен скопировать данные для одного студента (студент-клон) которые охватывают три таблицы:

  1. tblStudent (где PK - идентификатор студента)
  2. tblStudentSubjects (где PK - это StudentubjectId, а FK - StudentId)
  3. tblStudentSubjectComments (где PK не существует, а FK StudentSubjectId)

Для этого мне нужно было бы

  1. Создание записи студента путем копирования существующей записи студента и получения новой studentid
  2. создать запись о предмете для каждого существующего предмета, используя новый студент и получить новый StudentSubjectId
  3. создать запись комментария по предмету для каждого существующего студента тематический комментарий с использованием нового studentSubjectId

... надеюсь, у вас есть идея

Итак, есть ли элегантный способ сделать это с помощью CTE в одной процедуре хранения? (Я использую SQL Server 2005)

Ответы [ 2 ]

2 голосов
/ 26 июня 2009

Операторы INSERT и UPDATE работают одновременно только с одной таблицей. У вас есть 3 таблицы, которые нуждаются во ВСТАВКАХ. Вы можете определенно ВСТАВИТЬ несколько строк в таблицу за один раз, и я думаю, что это хорошо, когда это возможно, но вы не можете поместить строки в несколько таблиц одновременно.

Думай об этом так. Когда вы запрашиваете данные, вы извлекаете записи из многих источников в единый набор результатов. Когда вы изменяете данные, вы извлекаете записи из многих источников, чтобы применить изменения к одному набору результатов.

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

0 голосов
/ 26 июня 2009

Вы пытались использовать OUTPUT INTO , чтобы получить результаты начальных операций в другой таблице и повторить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...