Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Всем привет !
Имеется следующий запрос:

Create proc dbo.tmptabcreate1
as
CREATE TABLE #tmpTable2 ( Field1 uniqueidentifier, Field2 int, Field3 varchar(255))
go


Выполняю процедуру:
exec dbo.tmptabcreate1 - пишит, что команда выполнена, но когда я делаю выборку записей

SELECT * 
FROM #tmpTable2

То пишет, что такой таблицы не существует

Пробовал создавать так:
Create proc dbo.tmptabcreate1
as
exec('CREATE TABLE #tmpTable2 ( Field1 uniqueidentifier, Field2 int, Field3 varchar(255))')
go

Но, та же самая проблема.

Что не так ? :(
9 дек 13, 10:36    [15262894]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
Что не так ? :(

Все тоже самое
Надо в статье CREATE TABLE читать параграф про временные таблицы. Особенно абзац про время жизни и область видимости.
9 дек 13, 10:38    [15262904]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory,

Как я понял если я сделаю так:

Create proc dbo.tmptabcreate1
as
CREATE TABLE #tmpTable2 ( Field1 uniqueidentifier, Field2 int, Field3 varchar(255))
exec tmptabins1 --Процедура заполнения записями #tmpTable2
go


То будет все работать ? (Просто, если можете, дайте ответ ввиде "Да", "Нет") :)
9 дек 13, 11:03    [15263068]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
То будет все работать ?

Если под "все" вы понимаете SELECT * FROM #tmpTable2, то ответ - нет
9 дек 13, 11:08    [15263113]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
pio777
Member

Откуда:
Сообщений: 127
SonyPictures,

А в чем проблема проверить самому???

CREATE PROC tmptabins1 AS
INSERT INTO #tmpTable2(Field1) SELECT NEWID()
GO
CREATE PROC dbo.tmptabcreate1
AS
CREATE TABLE #tmpTable2 ( Field1 uniqueidentifier, Field2 int, Field3 varchar(255))
EXEC tmptabins1 --Процедура заполнения записями #tmpTable2
SELECT * FROM #tmpTable2
GO
EXEC tmptabcreate1
GO
DROP PROC tmptabins1, tmptabcreate1
9 дек 13, 11:14    [15263145]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory
SonyPictures
То будет все работать ?

Если под "все" вы понимаете SELECT * FROM #tmpTable2, то ответ - нет


Простите, я ступил что-то ... ведь после выполнения процедуры таблица удаляется ...
А можно как то это обойти ? Или время жизни ни как не обойти ?
9 дек 13, 11:14    [15263149]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
А можно как то это обойти ?

Правильным проектированием и постановкой задачи
9 дек 13, 11:15    [15263159]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
SonyPictures
А можно как то это обойти ? Или время жизни ни как не обойти ?


создать таблицу до вызова процедуры...в процедуре её заполнить...по выходу из процедуры таблица всё ещё будет вам "видна"
9 дек 13, 11:28    [15263280]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
KRS544
Member

Откуда:
Сообщений: 497
Можно создать глобальную временную таблицу ( create table ##tmp_table_name ), но это не всегда хорошо
9 дек 13, 12:10    [15263652]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
KRS544
Можно создать глобальную временную таблицу ( create table ##tmp_table_name ), но это не всегда хорошо


Могут возникнуть ошибки если много пользователей будет(только если не генерировать уникальное имя таблицы) , поэтому и делаю локальную.
9 дек 13, 12:32    [15263807]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
SonyPictures
Glory
пропущено...

Если под "все" вы понимаете SELECT * FROM #tmpTable2, то ответ - нет


Простите, я ступил что-то ... ведь после выполнения процедуры таблица удаляется ...
А можно как то это обойти ? Или время жизни ни как не обойти ?


вы бы написали, что вы хотите сделать и для чего вам нужна временная таблица
9 дек 13, 12:42    [15263914]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Winnipuh,

Если объяснить все полностью ... то врятли здесь поймет о чем я, но я попробую.

Создается 4 временных таблицы, в них записываются необходимые мне данные.
Затем идет обновление записей одной из ВТ (3 к примеру) , нужно для последующей вставки в основные таблицы обновить № модели оборудования.
Далее идет выборка нужных полей из всех 4 временных таблиц и затем они вставляются в Основную таблицу.

А если само задание, то мне надо перенести оборудование из одной таблицы в другую при этом после переноса удалить данные из 1 таблицы. (Звучит легко, но на деле это труднее, что бы перенесенные записи отображались в "ИнфраМенджере", нужно при переносе данных заполнить сразу 3 таблицы данными ... который как раз и берутся из различных временных таблиц ... + ко всему мне надо это все оформить в виде хранимой процедуры)
9 дек 13, 12:50    [15263985]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
Затем идет обновление записей одной из ВТ (3 к примеру

Кто делает эти обновления ? Пользователь ?
9 дек 13, 12:52    [15264002]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
SonyPictures
Winnipuh,

Если объяснить все полностью ... то врятли здесь поймет о чем я, но я попробую.

Создается 4 временных таблицы, в них записываются необходимые мне данные.
Затем идет обновление записей одной из ВТ (3 к примеру) , нужно для последующей вставки в основные таблицы обновить № модели оборудования.
Далее идет выборка нужных полей из всех 4 временных таблиц и затем они вставляются в Основную таблицу.

А если само задание, то мне надо перенести оборудование из одной таблицы в другую при этом после переноса удалить данные из 1 таблицы. (Звучит легко, но на деле это труднее, что бы перенесенные записи отображались в "ИнфраМенджере", нужно при переносе данных заполнить сразу 3 таблицы данными ... который как раз и берутся из различных временных таблиц ... + ко всему мне надо это все оформить в виде хранимой процедуры)


ну вот...
если всё это делается внутри одной процедуры, тогда всё вам уже объяснили, создавайте внутри, работайте, удаляйте и т.д..
9 дек 13, 12:56    [15264029]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory,

нет, я.
Пользователь делает только одно действие во всем этом - это вызывает процедуру на выполнение, а она все сама делает, а пользователь затем открывает "ИнфраМенеджер" и там нужное ему оборудование. :)
(Наверно надо уточнить, на всякий случай, "ИнфраМенеджер" берет данные из Вьюшек, ну а Вьюшки конечно же состоят из нескольких таблиц, поэтому и идет заполнение сразу нескольких таблиц)
9 дек 13, 12:57    [15264043]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
нет, я.

facepalm
Я правильно понимаю
что нужно
- взять записи из связанных таблиц
- изменить в них программно(!) какие то значения
- перенести полученные данные в другую таблицу
9 дек 13, 13:01    [15264076]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory
SonyPictures
нет, я.

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


В принципе да. Ну и все это сделать одной процедурой.
10 дек 13, 09:46    [15268767]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
В принципе да.

И зачем тут временные таблицы нужны ? Да еще создаваемые в разных процедурах ?
10 дек 13, 10:14    [15268922]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory,

Мне сказали "Ты не опытен, делай через временны таблицы" , вот так вот. Тут можно было конечно сделать все в одной временной таблице, я сказал , что будет логичнее сделать в одной, но опять же ... мне сказали "Для каждого запроса создавай свою временную таблицу" , а я такой - ну лаадно.
10 дек 13, 11:12    [15269407]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
Glory
Member

Откуда:
Сообщений: 104751
SonyPictures
Тут можно было конечно сделать все в одной временной таблице,

Еще раз вопрос - с чего вы решили, что здесь вообще нужны временные таблицы ?

SonyPictures
но опять же ... мне сказали

Что ж вы тогда к ним с вопросами то не обращаетесь ?
10 дек 13, 11:15    [15269438]     Ответить | Цитировать Сообщить модератору
 Re: CREATE Table in stored procedure  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory
SonyPictures
Тут можно было конечно сделать все в одной временной таблице,

Еще раз вопрос - с чего вы решили, что здесь вообще нужны временные таблицы ?


С ними легче по крайней мере на моем уровне зназний :( (если бы знал другой способ был бы рад его опробовать)


Glory
SonyPictures
но опять же ... мне сказали

Что ж вы тогда к ним с вопросами то не обращаетесь ?


Потому что "им" нет до меня дела, главное что бы я сделал , а как, все равно ... (хотя судя по их "наставлениям" далеко не все равно) , вообщем если я что-то спрашиваю глупое , легкое для большинства (например как в этой теме), мне ничего не говорят кроме как "Ищи в интернете"
И если я не нахожу решения проблемы, то отписываюсь здесь ... две темы создавал глупые конечно из-за своей невнимательности вообщем. Что-то я расписался тут...
10 дек 13, 12:00    [15269868]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить