Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.30;
Скачать: CL | DM;

Вниз

Переменное название временной таблицы в сохраненной процедуре.   Найти похожие ветки 

 
asafr ©   (2002-05-06 17:05) [0]

Здравствуйте! П омогите решить небольшую проблему D5->MSSQL Server 7.0
Суть проблемы: Есть MDI-приложение с вызовом множества форм. В ряде форм используется список временных таблиц с одинаковой структурой. Мне необходимо, чтобы при открытии этих форм эти временные таблицы имели разные названия, например: открываю форму fm_One-> создается временная таблица с названием #GazRepGroup, открываю fm_Two -> #WaterRepGroup и т.д. Как видите, названия отличаются в первых символах названия вр. таблиц. Использую сохраненную процедуру, которая в сильно упрощенном виде выглядит так:
CREATE PROCEDURE asp_Test
@RepGr nvarchar(8),
@5Cr nvarchar(8),
@GrSum nvarchar(8)
AS
declare @StrRepGr nvarchar(100)
declare @Str5Cr nvarchar(100)
declare @StrGrSum nvarchar(100)
IF Exists (select * from tempdb..sysobjects
where name = "#"+@RepGr)
BEGIN
set @StrRepGr="drop table #"+@RepGr
set @Str5Cr="drop table #"+@5Cr
set @StrGrSum="drop table #"+@GrSum
Execute (@StrRepGr)
Execute (@Str5Cr)
Execute (@StrGrSum)
END
set @StrRepGr="create table #"+@RepGr+"(a nvarchar(8), b int)"
set @Str5Cr="create table #"+@5Cr+" (a nvarchar(8), c int)"
set @StrGrSum="create table #"+@GrSum+" (c int, d int)"

Execute (@StrRepGr)
Execute (@Str5Cr)
Execute (@StrGrSum)


Из Дельфи5 вызываю процедуру так:


with sp_Proc do begin
try
if active then close;
ProcedureName:="asp_Test";
Parameters.ParseSQL("Exec asp_Test @RepGr=:@RepGr,@5Cr=:@5Cr,@GrSum=:@GrSum",True);
Parameters.ParamByName("@RepGr").Value:="GazRepGroup";
Parameters.ParamByName("@5Cr").Value :="Gaz5Crack";
Parameters.ParamByName("@GrSum").Value:="GazGroupSum";
ExecProc;
finally
close
end;
end;

По моей задумке, я, объявляя в Дельфи значение переменной, например @RepCr:="GazRepGroup" при использовании СП получаю наименование вр. таблицы "#GazRepGroup" и т.д. Но не тут-то было... При дальнейшей работе с вр. таблицей вылетает ошибка:"Invalid object #GazRepGroup"... В tempdb..sysobjects название этой вр. таблицы не появляется... Что делаю не так?
Заранее всем благодарен.....


 
Belov ©   (2002-05-06 17:23) [1]

используй
if object_id("tempdb..#GazRepGroup") is not null
...


 
asafr ©   (2002-05-06 17:29) [2]

Согласен, что это подходит к части СП, где
IF Exists (select * from tempdb..sysobjects
where name = "#"+@RepGr)
BEGIN
....
....
END

Но почему не создаются вр. таблицы? Может это от того, что применяю EXECUTE? Т.е. вр. таблица создается, пока выполняется EXECUTE, а после выполнения EXECUTE вр. таблица самоуничтожается...?


 
asafr ©   (2002-05-06 17:33) [3]

Может есть более интересный вариант объявления переменного названия вр. таблицы?


 
wicked ©   (2002-05-06 18:56) [4]

знач так, по порядку...
если временная таблица создаётся в хп, то она является локальной для этой хп, то есть умирает при выходе из процедуры... т. о., варианты с execute не проходят... как решение, могу предложить создавать временные таблицы сразу после установки соединения... уничтохать их не нужно, это сделает сервер при разрыве соединения...
и второе... зачем создавать разные таблицы с одинаковой структурой?... не проще ли создать одну таблицу с этой структурой, только добавить в неё еще одно поле, которое бы характеризовало принадлежность данных?...


 
asafr ©   (2002-05-07 12:19) [5]

wicked, спасибо за совет, но ты не знаешь постановки моей задачи... Если мне надо создавать таблицы так, как я их создаю - значит так и нужно...
Спасибо всем ответившим....



Страницы: 1 вся ветка

Текущий архив: 2002.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-97404
MBo
2002-04-22 13:58
2002.05.30
Ну совсем несложно.


14-97409
waper
2002-04-22 15:42
2002.05.30
начинающий


4-97459
[HDD]John
2002-03-28 13:52
2002.05.30
Исправляюсь: имитация нажати КЛАВИШИ ТАВ


1-97325
indigo
2002-05-17 18:21
2002.05.30
кнопка


1-97215
normal
2002-05-18 07:54
2002.05.30
Динамическое создание TThread