SQL код / ​​логика - PullRequest
       6

SQL код / ​​логика

0 голосов
/ 28 октября 2010

У меня есть таблица с самоссылкой, называемая проектом, которая имеет основную взаимосвязь деталей между родительскими проектами и подпроектами, подпроектами ...

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

поля таблицы: projectId, parentProjectId, releaseId

, у кого-нибудь есть подсказка о том, как запустить такой отчет вsql 2005?

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

Хорошо, это не проверено и делает некоторые предположения. Первое предположение состоит в том, что идентификаторы являются целыми числами и что releaseid никогда не будет 0. Следующее предположение - это projectid - это PK таблицы. Последнее предположение состоит в том, что вы можете сообщить родительскому проекту, потому что парентида равна нулю.

Теперь единственный правильный способ сделать это - триггер. Таким образом, это всегда будет правильно, независимо от того, как изменяются данные. Нет другого абсолютно надежного способа обеспечить синхронизацию данных. Триггеры должны быть написаны для обработки нескольких записей. Этот триггер является приблизительным приближением и не тестируется. Обязательно тщательно протестируйте триггер (включая тестирование нескольких вставок rcord и обновления нескольких записей) перед его использованием.

create trigger testtrigger on mytable
for insert, update
as

select inserted.projectid as parentid, inserted.releaseid as newreleaseid
into #changedparentreleaseid
from inserted i 
join deleted d 
  on i.projectid = d.projectid
where i.parentid is null
and isnull(d.releaseid,0) <> isnull(i.releaseid,0)

update m
set releaseid = c.newreleaseid
from mytable m
join #changedparentreleaseid c
  on c.parentid = m.parentid
0 голосов
/ 28 октября 2010

Смежные списки могут быть обработаны довольно эффективно, используя общее табличное выражение.Это может быть способ начать.

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