Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

T-SQL ошибка " В базе данных уже существует объект с именем "#t2". "

Коновалов Вадим Мастер (2343), на голосовании 4 года назад
Подскажите, мб кто сталкивался, почему данный запрос выдаёт сие сообщение, в предпоследнем запросе я её явно дропаю, и именно на последнем запросе выдаёт ошибку. Если выполнять все запросы по отдельности, то всё ок

drop table #t1
select p.ID as PID,pp.id into #t1 FROM tmp_for_attach t
inner join people p on t.enp=p.enp--t.fam=p.fam and t.IM=p.IM AND t.OT=p.OT AND t.DR=p.DR
inner join POLIS PP ON P.ID=pP.PID
WHERE (stage = 1) AND t.opdoc=3
order by p.id,pp.ID

drop table #t2
select p.ID,MAX(pp.id) as maxpolid into #t2 FROM tmp_for_attach t
inner join people p on t.enp=p.enp--t.fam=p.fam and t.IM=p.IM AND t.OT=p.OT AND t.DR=p.DR
inner join POLIS PP ON P.ID=pP.PID
WHERE (stage = 1) AND t.opdoc=3
group by p.id
order by p.id

delete from #t1 where id in(select #t2.maxpolid from #t2)

drop table #t2

select PID,MAX(id)as id into #t2 from #t1
group by pid
order by pid
Голосование за лучший ответ
Sergey V. Voronin Искусственный Интеллект (292282) 5 лет назад
после дропа коммит не сделан, полагаю.
Коновалов ВадимМастер (2343) 5 лет назад
Можно подробнее? Про коммит не слышал, транзакциями не пользовался, но сейчас попробовал так:

BEGIN TRANSACTION;
drop table #t1
select p.ID as PID,pp.id into #t1 FROM tmp_for_attach t
inner join people p on t.enp=p.enp--t.fam=p.fam and t.IM=p.IM AND t.OT=p.OT AND t.DR=p.DR
inner join POLIS PP ON P.ID=pP.PID
WHERE (stage = 1) AND t.opdoc=3
order by p.id,pp.ID

drop table #t2
select p.ID,MAX(pp.id) as maxpolid into #t2 FROM tmp_for_attach t
inner join people p on t.enp=p.enp--t.fam=p.fam and t.IM=p.IM AND t.OT=p.OT AND t.DR=p.DR
inner join POLIS PP ON P.ID=pP.PID
WHERE (stage = 1) AND t.opdoc=3
group by p.id
order by p.id

delete from #t1 where id in(select #t2.maxpolid from #t2)

drop table #t2
COMMIT TRANSACTION;

BEGIN TRANSACTION;
select PID,M
Коновалов ВадимМастер (2343) 5 лет назад
BEGIN TRANSACTION;
select PID,MAX(id)as id into #t2 from #t1
group by pid
order by pid

drop table #t1

COMMIT TRANSACTION;

то же самое в той же строке
Sergey V. Voronin Искусственный Интеллект (292282) так не после каждого ли дропа надо коммит делать? А то и после каждого запроса.
Аглая Шниц Искусственный Интеллект (145175) 5 лет назад
а вот тут:
https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-table-transact-sql?view=sql-server-ver15

предупреждение:

! Important

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. Otherwise an unexpected error may occur.
Коновалов ВадимМастер (2343) 5 лет назад
Спасибо, помогла инструкция GO
Похожие вопросы