Re: drop / create table
От: andik  
Дата: 22.01.04 08:48
Оценка: -1
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>MSSQL2K

KIA>вот такой запрос:

KIA>
KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1
KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))


временная таблица сопоставляется с номером сессии. По этому в tempdb в системных таблицах она будет иметь название типа
___t156678 вообщем что-то в таком духе (что есть логично), поэтому ты не определишь есть она или нет таким способом.

KIA>выполненный в QA выдает 

KIA>[sql]
KIA>Server: Msg 2714, Level 16, State 1, Line 13
KIA>There is already an object named '#t1' in the database.
KIA>


чтобы это побороть в QA

в начале скрипта create table
а в самом конце drop table.

Ну и еще, если у тебя после create table скрипт упал, то чтоб запустить его заново, надо сделать drop table
... << RSDN@Home 1.0 beta 7a >>
Re[4]: drop / create table
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.01.04 16:32
Оценка: +1
Здравствуйте, lazymf, Вы писали:

L>Ясно. А реальной жизни, как и в примере, структура #t1 постоянная? Если да, то может быть просто делать

L>
L>DELETE FROM #t1
L>

L>вместо того чтобы ее дропать и снова создавать?
Тогда уж TRUNCATE TABLE (если ее ограничения приемлемы)
... << RSDN@Home 1.1.3 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
drop / create table
От: KetchUp Inside aka Zig  
Дата: 22.01.04 07:56
Оценка:
MSSQL2K
вот такой запрос:

if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
drop table #t1

create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
create index ix_t1_date on #t1(Дата)
create index ix_t1_good on #t1(Товар)



if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
drop table #t1

create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
create index ix_t1_date on #t1(Дата)
create index ix_t1_good on #t1(Товар)


выполненный в QA выдает

Server: Msg 2714, Level 16, State 1, Line 13
There is already an object named '#t1' in the database.


может кто подскажет как это побороть?
Re: drop / create table
От: Andy_MAN Россия  
Дата: 22.01.04 08:04
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>MSSQL2K

KIA>вот такой запрос:

KIA>
KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)

Попробуй вставить здесь GO

KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)
KIA>
Re: drop / create table
От: lazymf Россия  
Дата: 22.01.04 08:08
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>
KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)



KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

GO

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)
KIA>
Re[2]: drop / create table
От: KetchUp Inside aka Zig  
Дата: 22.01.04 08:25
Оценка:
Здравствуйте, Andy_MAN, Вы писали:

A_M>Попробуй вставить здесь GO


нельзя
еще раньше определена локальная переменная и она используется в запросах, которые идут после приведенного кода
если ставишь GO — она теряется из области видимости
Re: drop / create table
От: Аноним  
Дата: 22.01.04 08:29
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>MSSQL2K

KIA>вот такой запрос:

KIA>
KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)



KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)
KIA>


KIA>выполненный в QA выдает


KIA>
KIA>Server: Msg 2714, Level 16, State 1, Line 13
KIA>There is already an object named '#t1' in the database.
KIA>


KIA>может кто подскажет как это побороть?


if OBJECT_ID('tempdb..#t1','U') is not null
drop table #t1

create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
create index ix_t1_date on #t1(Дата)
create index ix_t1_good on #t1(Товар)

go

if OBJECT_ID('tempdb..#t1','U') is not null
drop table #t1

create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
create index ix_t1_date on #t1(Дата)
create index ix_t1_good on #t1(Товар)
Re[2]: drop / create table
От: Аноним  
Дата: 22.01.04 08:32
Оценка:
табличные переменные спасут отца демократии?
Re[3]: drop / create table
От: KetchUp Inside aka Zig  
Дата: 22.01.04 08:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>табличные переменные спасут отца демократии?


спасибо

возможно

а примерчик можно? и как насчет производительности по сравнению с локальными переменными?
Re[2]: drop / create table
От: KetchUp Inside aka Zig  
Дата: 22.01.04 08:54
Оценка:
Здравствуйте, andik, Вы писали:

A>временная таблица сопоставляется с номером сессии. По этому в tempdb в системных таблицах она будет иметь название типа

A>___t156678 вообщем что-то в таком духе (что есть логично), поэтому ты не определишь есть она или нет таким способом.

ну как раз с этим-то проблем нет никаких все определяется и работает так как надо
просто не получается выполнить prepare для запроса — поэтому и возникает ошибка — тут тоже все ясно... но как побороть?

A>в начале скрипта create table

A>а в самом конце drop table.

хм... как выход — сделать имена всех временных таблиц уникальными...
но мне просто интересно, есть ли другой способ обойти данную проблему
Re: drop / create table
От: seregaa Ниоткуда http://blogtani.ru
Дата: 22.01.04 08:59
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>вот такой запрос:


KIA>
KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)



KIA>if ( SELECT OBJECT_ID('tempdb..#t1') ) is not null
KIA>drop table #t1

KIA>create table #t1 (Дата datetime, Товар int, КолОптРос numeric(15, 4))
KIA>create index ix_t1_date on #t1(Дата)
KIA>create index ix_t1_good on #t1(Товар)
KIA>


KIA>выполненный в QA выдает


KIA>
KIA>Server: Msg 2714, Level 16, State 1, Line 13
KIA>There is already an object named '#t1' in the database.
KIA>


KIA>может кто подскажет как это побороть?


ИМХО анализатор запросов не может определить, что в момент второго "create table" эта таблица однозначно будет дропнута. Либо это глюк(недоработка?), либо он руководствуется неизвестными нам соображениями, например, предполагая, что он будет распараллеливать этот запрос?

Попробуй обойтись одной таблицей, не пересоздавая ее. Например, в некоторых случаях можно просто очищать ее перед следующим проходом.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[2]: drop / create table
От: andik  
Дата: 22.01.04 09:25
Оценка:
Здравствуйте, seregaa, Вы писали:

S>ИМХО анализатор запросов не может определить, что в момент второго "create table" эта таблица однозначно будет дропнута. Либо это глюк(недоработка?), либо он руководствуется неизвестными нам соображениями, например, предполагая, что он будет распараллеливать этот запрос?


A local temporary table created within a stored procedure or trigger is distinct from a temporary table with the same name created before the stored procedure or trigger is called. If a query references a temporary table, and two temporary tables with the same name exist at that time, it is not defined which table the query is resolved against. Nested stored procedures can also create temporary tables with the same name as a temporary table created by the stored procedure that called it. All references to the table name in the nested stored procedure are resolved to the table created in the nested procedure, for example:


CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO


S>Попробуй обойтись одной таблицей, не пересоздавая ее. Например, в некоторых случаях можно просто очищать ее перед следующим проходом.

согласен
... << RSDN@Home 1.0 beta 7a >>
Re[3]: drop / create table
От: andik  
Дата: 22.01.04 09:27
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>Здравствуйте, andik, Вы писали:


A>временная таблица сопоставляется с номером сессии. По этому в tempdb в системных таблицах она будет иметь название типа

A>___t156678 вообщем что-то в таком духе (что есть логично), поэтому ты не определишь есть она или нет таким способом.

KIA>ну как раз с этим-то проблем нет никаких все определяется и работает так как надо

мда, лоханулся я с OBJECT_ID

KIA>просто не получается выполнить prepare для запроса — поэтому и возникает ошибка — тут тоже все ясно... но как побороть?


KIA>хм... как выход — сделать имена всех временных таблиц уникальными...

KIA>но мне просто интересно, есть ли другой способ обойти данную проблему

как советовали ранее, просто очищай таблицу
... << RSDN@Home 1.0 beta 7a >>
Re[3]: drop / create table
От: lazymf Россия  
Дата: 22.01.04 09:40
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

A_M>>Попробуй вставить здесь GO


KIA>нельзя

KIA>еще раньше определена локальная переменная и она используется в запросах, которые идут после приведенного кода
KIA>если ставишь GO — она теряется из области видимости

Ясно. А реальной жизни, как и в примере, структура #t1 постоянная? Если да, то может быть просто делать
DELETE FROM #t1

вместо того чтобы ее дропать и снова создавать?
Re: drop / create table
От: KetchUp Inside aka Zig  
Дата: 22.01.04 13:58
Оценка:
Всем большое спасибо!
К сожалению, тот ответ который хотелось, я не услышал.
Поступил просто — дал таблицам уникальные имена (задача позволяла сделать это).
Просто хотелось найти какое-то другое решение
Еще раз спасибо
Re: drop / create table
От: Lloyd Россия  
Дата: 22.01.04 23:13
Оценка:
Здравствуйте, KetchUp Inside aka Zig, Вы писали:

KIA>может кто подскажет как это побороть?


В таких случаях я обычно ставлю галку Tools>Options>Connections>Disconnect after query executes
... << RSDN@Home 1.1.2 stable >>
Re[2]: drop / create table
От: KetchUp Inside aka Zig  
Дата: 23.01.04 14:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, KetchUp Inside aka Zig, Вы писали:


KIA>>может кто подскажет как это побороть?


L>В таких случаях я обычно ставлю галку Tools>Options>Connections>Disconnect after query executes


запросы предназначались для DTS Package, так что это не очень-то поможет...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.