Страница: 1 |
|
Вопрос: Хранимие функции в SQL Server2000
|
Добавлено: 02.04.04 09:44
|
|
Автор вопроса: danser | ICQ: 299287824
|
В своей БД мне нужно обрабатывать в цикле некоторые даные вибраные по SQL-инструкции. Сначала я делал так(речь об VB .NET и SQL Server2000): - VB .NET \ ServerExplorer \ MyServer \ MyDateBase \ StoredProcedure – Создаю хранимую процедуру в которой задаю нужную мне SQL-инструкцию;
- Проект VB .Net \ - C помощю следующих инструкций заполняем обект DataSet11:
· DataGrid1.DataSource = DataSet11.MyProcedure · SqlCommand1.Parameters.Item(0).Value = MyValue · SqlDataAdapter1.SelectCommand = SqlCommandCodeR · SqlDataAdapter1.Fill(DataSet11)
- Отображаем обект DateSet11 в DataGrid1;
- Теперь через DataGrid1 (посредством строк и столбцов) я извлекаю нужние мне даные.
Ответить
|
Номер ответа: 1 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #1
|
Добавлено: 02.04.04 11:04
|
(продолжение) Но моя схема \\процедура>DataSet>DataGrid>переменная\\ мягко говоря „тежелая” для ее цикличного использования. Мне нужна схема: //процедура>переменная// Я думаю нужно использовать не хранимые процедуры а функции (inline function или table-valued function или scalar-valued function). Какую именно незнаю так как с функциями не работал. Интуитивно чувствую что нужно использовать table-valued function но не знаю что где: CREATE FUNCTION dbo.Function1 ( /* это я понял- параметри аналогично как в процедуре */ /* @parameter1 datatype = default value, @parameter2 datatype */ ) RETURNS /*???*/ /* @table_variable TABLE (column1 datatype, column2 datatype) */ AS BEGIN |
Номер ответа: 2 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #2
|
Добавлено: 02.04.04 11:07
|
(продолжение) BEGIN /*Тут наверное формируется SQL инструкция*/ /* INSERT INTO @table_variable sql select statement */ /* alternative sql statement or statements */ RETURN END Если кто может розясните что к чему, буду оченб благодарен
Ответить
|
Номер ответа: 3 Автор ответа: ol2003
Вопросов: 3 Ответов: 122
|
Профиль | | #3
|
Добавлено: 02.04.04 18:31
|
Не думаю, что это так уж тяжеловато использовать процедуру с параметрами в цикле. Передавай их значение через массив. Если же тебя интересует получеиние возврата из процедуры/функции, то это возможно и в процедуре. Ты можешь один из параметров указать с ключевым словом output. Что касается функций, то принипиальное отличие от процедуры - обязательно возвращает то или ное значение. Ты обязан указать datatype возвращаемого значения. (это там где у тебя вопросы). Ты не можешь использовать некоторые встроенные функции. Если установлен SQL Server, - почитай в SQL Books On Line статью "functions, user-defined" (CREATE FUNCTION), там есть список и примеры.
Ответить
|
Номер ответа: 4 Автор ответа: Alex3
ICQ: 9481061
Вопросов: 18 Ответов: 132
|
Профиль | | #4
|
Добавлено: 05.04.04 09:31
|
Что-то я не совсем понял, что ты хочешь, ну ладно... 1. Зачем для извлечения данных ты загоняешь DataSet в DataGrid, если данные можно брать прямо из DataSet? Как раз на этапе загрузки DataSet'а в DataGrid у тебя и будет основной тормоз. 2. Ты можешь организовать цикл непосредственно в хранимой процедуре и вернуть только то, чно тебе нужно. Смотри в Books Online "DECLARE CURSOR". (Курсоры, если ты не знаешь, это те же циклы).
Ответить
|
Номер ответа: 8 Автор ответа: Alex3
ICQ: 9481061
Вопросов: 18 Ответов: 132
|
Профиль | | #8
|
Добавлено: 21.04.04 12:23
|
Ну, да TSQL. А тебе не пофигу как Microsoft называет реализацию SQL в MS SQL Server?
Ответить
|
Номер ответа: 9 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #9
|
Добавлено: 23.04.04 07:45
|
если у меня есть некая процедура: ALTER PROCEDURE dbo.CityPoCountry@Country varchar(250) AS SELECT City, CodeZWFROM ZWWHERE (Country = @Country)RETURN она возвратит два столбика City, CodeZW, а как мне допустим получить(return) третье значения стобика CodeZW?
Ответить
|
Номер ответа: 11 Автор ответа: Alex3
ICQ: 9481061
Вопросов: 18 Ответов: 132
|
Профиль | | #11
|
Добавлено: 23.04.04 10:43
|
Результат выполнения хранимой процедуры пишешь в DataTable или DataSet, потмом: ds.Tables(0).Rows(2)("CodeZW") или tbl.Rows(2)("CodeZW")
Ответить
|
Номер ответа: 14 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #14
|
Добавлено: 23.04.04 23:23
|
Я не понял что имелось под словом идентификатор(ID), это номер сроки в полученом запросе, или уникальний номер записи(ключ)- как я понял имелось ввиду последнее- если да то в этом и проблема: я ж и незнаю какие значения(записи) или ID будут выданы по моему запросу в этих двух столбиках. Если заполнить хранимой процедурой обект DataSet то с DataSet как с таблицы можно что-то вибирать(по столбиках и строках),а мне надо решения (хранимая процедура или функция) которая возвращает одно значения не в DataSet а непосредственноt в определенную переменную что-то типа: x=f(Arg), где: х-некоторое искомое значения, f() -механизм которий возвращает результат по аргументу(строка и столбик зафиксированы- например хранимая процедура для 1-й строки 2-го столбика), Arg-наш параметр; или: x=f(Arg,Row,Col) ,где х-некоторое искомое значения, f() -механизм которий возвращает результат по аргументу(строка и столбик - Row,Col),Arg-наш параметр.
Ответить
|
Страница: 1 |
Поиск по форуму