Форум: "Базы";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
ВнизПеременное название временной таблицы в сохраненной процедуре. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c