Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-97123
Sewix
2002-05-02 09:01
2002.05.30
Как узнать в DBGrid значение конкретной ячейки


1-97264
Dizer
2002-05-18 12:30
2002.05.30
Преобразование 16-ричного числа в двоичное


7-97445
sj
2002-03-01 18:22
2002.05.30
Формирование ресурсов сообщений


3-97211
Chainik
2002-04-29 09:33
2002.05.30
Прерывание выполнения запроса


3-97214
Fareader
2002-05-10 11:47
2002.05.30
Значение генератора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский