powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / drop table не отрабатывает...
20 сообщений из 20, страница 1 из 1
drop table не отрабатывает...
    #39610489
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотел написать так:

create table #T (ID int)
drop table #T

create table #T (ID int, A char(10))
drop table #T


Ругается, что
There is already an object named '#T' in the database.

А почему первый DROP не отрабатывает ?
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610506
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оказывается есть ограничение:

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610528
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table #T (ID int)
go
drop table #T
go
create table #T (ID int, A char(10))
go
drop table #T
go
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610578
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanPОказывается есть ограничение:

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batchСтранно, откуда это? Можно в одном батче, проверяется же за секунду.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610586
ryli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/sql-server-utilities-statements-go

GO обозначает конец пакета Transact-SQL инструкции
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610589
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаем справку и не гадаем.

CREATE TABLE ...
Если в пределах одной хранимой процедуры или пакета создается более одной временной таблицы, им должны быть присвоены разные имена.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610592
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgAlexanPОказывается есть ограничение:

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batchСтранно, откуда это? Можно в одном батче, проверяется же за секунду.
для временных нет.

авторIf more than one temporary table is created inside a single stored procedure or batch, they must have different names.

если не ошибаюсь, DB ENGINE парсит создание/объявление временныех объекты/переменных в первую очередь, и для него нет дропа после создания
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610596
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvgпропущено...
Странно, откуда это? Можно в одном батче, проверяется же за секунду.
для временных нет.Ээээ, как это?
Конечно, можно создать таблицу, а потом её удалить в одном батче.
Код: sql
1.
2.
create table #t(id int)
drop table #t
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610597
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgTaPaKпропущено...

для временных нет.Ээээ, как это?
Конечно, можно создать таблицу, а потом её удалить в одном батче.
Код: sql
1.
2.
create table #t(id int)
drop table #t


не читайте тему, сразу отвечайте

речь про
Код: sql
1.
2.
3.
create table #t(id int)
drop table #t
create table #t(id int)
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610601
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvgпропущено...
Ээээ, как это?
Конечно, можно создать таблицу, а потом её удалить в одном батче.
Код: sql
1.
2.
create table #t(id int)
drop table #t



не читайте тему, сразу отвечайте

речь про
Код: sql
1.
2.
3.
create table #t(id int)
drop table #t
create table #t(id int)

Я не про тему, я про конкретно фразу (откуда то), которая меня удивила:

alexeyvgAlexanPОказывается есть ограничение:

DROP TABLE and CREATE TABLE should not be executed on the same table in the same batchСтранно, откуда это? Можно в одном батче, проверяется же за секунду.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610602
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
create table #T (ID int)
if @a = 1
drop table #T

create table #T (ID int, A char(10))
drop table #T



Что делать в этом случае? Ограничение вполне закономерное.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610605
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Код: sql
1.
DROP TABLE and CREATE TABLE


ну сделайте DROP и CREATE, а не как вы пишите CREATE и DROP ^)
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610607
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Код: sql
1.
2.
3.
4.
5.
6.
create table #T (ID int)
if @a = 1
drop table #T

create table #T (ID int, A char(10))
drop table #T




Что делать в этом случае? Ограничение вполне закономерное.Ничего, нужно просто не писать так.

Тут важно не смешивать 2 понятия - видимость идентификатора компилятором и создание/ удаление временной таблицы

create table #T для компилятора есть декларирование таблицы в батче, и она будет видима им даже до её реального создания (и, само собой, после её удаления), например, так:

Код: sql
1.
2.
3.
4.
5.
6.
if 1=0 
	select * from #t
create table #t(id int)
drop table #t
if 1=0 
	select * from #t



Соответственно, тогда становится понятно, почему нельзя в том же батче создать (декларировать для компилятора) таблицу второй раз.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
if 1=0 
	select * from #t -- какая из таблиц имеется в виду???
create table #t(id int)
drop table #t
create table #t(id varchar)
drop table #t
if 1=0 
	select * from #t -- и тут тоже???
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610609
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvg,

Код: sql
1.
DROP TABLE and CREATE TABLE



ну сделайте DROP и CREATE, а не как вы пишите CREATE и DROP ^)Ну дык я же про это и пишу.

В той смутившей меня фразе не видно указание на последовательность, может, фраза вырвана из контекста?
Там просто написано, что эти 2 стейтмента не должны писаться в одном батче.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610620
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фраза из документации


https://msdn.microsoft.com/ru-ru/library/ms173790(v=sql.120)

DROP TABLE (Transact-SQL)

Important
DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. Otherwise an unexpected error may occur.

Важно!
Инструкции DROP TABLE и CREATE TABLE нельзя выполнять для одной таблицы в одном пакете. В противном случае может произойти непредвиденная ошибка.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610652
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanP,

это не требование, а здравая рекомендация.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610689
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanPImportant
DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. Otherwise an unexpected error may occur.

Важно!
Инструкции DROP TABLE и CREATE TABLE нельзя выполнять для одной таблицы в одном пакете. В противном случае может произойти непредвиденная ошибка.

не совсем верно :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create procedure dbo.test_tmptales
as begin
  if object_id('tempdb..#test_from_prc', 'U') is not null
    drop table  #test_from_prc
    create table #test_from_prc (i int null)

    if object_id('tempdb..#test_from_prc', 'U') is not null
    drop table  #test_from_prc
end
GO
drop procedure dbo.test_tmptales
GO
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610694
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxне совсем верно :)Да; в общем, как простая инструкция для начинающих сойдёт, но в качестве исчерпывающего объяснения механизмов синтаксического анализатора батча, разрешения имён, правил видимости/существования временных таблиц выглядит бедно.

И даже как простая инструкция для начинающего выглядит некорректно, лучше бы написали "Инструкцию CREATE TABLE нельзя ставить после CREATE TABLE для одной таблицы в одном батче", что было бы неверно, как видно из вашего примера, но всё таки более корректно, чем сейчас.
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610695
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgлучше бы написали "Инструкцию CREATE TABLE нельзя ставить после CREATE TABLE для одной таблицы в одном батче"то есть "Инструкцию CREATE TABLE нельзя ставить после DROP TABLE для одной таблицы в одном батче"
...
Рейтинг: 0 / 0
drop table не отрабатывает...
    #39610696
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

сорри , но ето все описанно в хелпе,да и експеримент занимает 1 минуту написания кода. Если ТС реально интресно что и как- то направление движения ему выдали... далее нет ничего ценнее самообучения.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / drop table не отрабатывает...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]