Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

Хранимая процедура в запросе   Найти похожие ветки 

 
Котяра   (2003-07-03 19:07) [0]

Привет всем!

Я написал для обработки полей таблицы хранимую процедуру. Как мне вставить в запрос? Если я ее выполняю "вручную", т.е.
exec имя_процедуры данные, или просто имя_процедуры данные, - то все нормально, выдается результат. а в инструкции select она работать не хочет. Как заставить ее обрабатывать столбец таблицы?

С уважением, Разживин Александ.


 
Тих   (2003-07-03 21:35) [1]

такая хранимая процедура в MSSQL 2000 носит название функции, если я вас правильно понял, см. create function в books online.
из функции даже можно делать select, если функция возвращает таблицу.

Вариант второй. Есть таблица, над каждой ячейкой некоего поля которой надо проделать какую-то сложную манипуляцию. Аналогично, пиишется функция навроде
create function foo(@value nvarchar(100)) returns int
as
begin
/* 1000 строк сложного кода */
return len(@value);
end

потом делается вьюшка навроде
create view view_tbl as select a, dbo.foo(b) from tbl

и - дело в шляпе.


 
Котяра   (2003-07-03 23:16) [2]

дык и функцию написал, и селект делал наподобие того - не работает, причем вручную функция выполняется отлично
:-(


 
sniknik   (2003-07-03 23:26) [3]

исключительно правильная функция получилась, в потемках не работает. наде вывести ее в свет. (в смысле на всеобшее обозрение)

Котяра © (03.07.03 19:07)
...
exec имя_ процедуры
Тих (03.07.03 21:35)
...
create function

забавно, но мне кажется потому и не работает (хотя никаких оснований к таким выводам нет)


 
Котяра   (2003-07-04 06:56) [4]

Процедура называется IntToDateStr("дата - целое число", "символ - разделитель", "строка для <пустых> дат")

В поле хранятся данные типа
20020301, 20020000, 0, 20030500, 200112
Процедура (вернее функция) выдает:
01.03.2002, 2002, ****, 05.2003, 12.2001


 
ЮЮ   (2003-07-04 08:14) [5]

Осталось показать как ты её используешь в запросе и вручную :-)


 
sniknik   (2003-07-04 08:38) [6]

кстати если функция написана исключительно ради разбора одного поля то по моему она лишняя, достаточно бы сделать VIEW и работать с таблицей через нее.

но это так, лирическое отступление. по вопросу информации недостаточно.


 
Fiend   (2003-07-04 12:51) [7]

То Котяра:
а что если показать нам скрипт функции?

И в данном случае поддержу sniknik © (04.07.03 08:38).
Хотя даже в принципе можно и безо всяких там функций и вьюх


 
Котяра   (2003-07-07 17:54) [8]

Текст хранимой процедуры

CREATE PROCEDURE SP_INTTODATESTR (@I INTEGER, @R CHAR(1) = ".", @Z CHAR(10) = "****") AS

DECLARE
@N INTEGER,
@S CHAR(10),
@D CHAR(3),
@M CHAR(3)

BEGIN
if @I IS NULL or @I = 0
select @Z else
begin
if @I < 100 begin if @I > 50
select @N = (1900 + @I) * 10000
else select @N = (2000 + @I) * 10000
end
else if @I < 10000
select @N = @I * 10000
else if @I < 1000000
select @N = @I * 100
else select @N = @I
select @S = CONVERT(CHAR(10),@N)
if substring(@S,7,2) <> "00"
select @D = substring(@S,7,2) + @R
else select @D = ""
if substring(@S,5,2) <> "00"
select @M = substring(@S,5,2) + @R
else
begin
select @D = ""
select @M = ""
end
select @D + @M + substring(@S,1,4)
end
END
GO

Результат возвращается в виде строки, например запускаю так:

EXEC SP_INTTODATESTR 20030701 выдает:
------------
01.07.2003

Как мне его "засунуть" в select? Пробую консрукцию типа:
SELECT EQ_LIST.DATA1, "DATE1" = (SP_INTTODATESTR EQ_LIST.DATA1) FROM EQ_LIST -
не работает. Я уже все варианты испробовал....
пробовал возвращать результат в виде параметра с OUTPUT, еще сложнее получается. Сервер MS SQL 6.5, там _функций_ не предусмотрено. А таких полей в таблице - 6, если эту процедуру писать в вьювере, мне кажется, слишком "круто".



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

Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
3-100557
Jaxtor
2003-07-08 11:24
2003.07.31
TDbCheckBox


1-100699
Guest7
2003-07-18 13:39
2003.07.31
Добавить к TDateTime несколько минут


14-100896
clickmaker
2003-07-11 20:04
2003.07.31
Офис 2000 и ХР не ставится на 2000 сервак (!!!)


14-100943
Vlad Oshin
2003-07-14 14:00
2003.07.31
Очкарик. Рассказ.


3-100569
ruslan_as
2003-07-08 10:41
2003.07.31
Как убрать лишние пробелы в поле InteBase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский