Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Встроенная процедура (именно процедура) sp_batch_param разбирает передаваемую единственным параметром строку SQL-запроса и формирует таблицу использованных в запросе параметров.
Вызов делается так:
DECLARE @SQLString nvarchar(500);
/* Build the SQL string */
SET @SQLString =
N'declare @T table (id char(36));
SELECT * FROM tmp_alex
WHERE ID = @ID or id in (select id from @T)';
EXECUTE sp_batch_params @SQLString
Попробовал. Работает.
При выполнении в Server Meneger Studio ВОЗВРАЩАЕТ !!!! таблицу с описанием параметра запроса (ID). Но вот как получить результат исполнения sp_batch_params, если она вызывается в теле процедуры на TSQL?
Заранее спасибо.
11 ноя 09, 14:35    [7914341]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
https://www.sql.ru/faq/faq_topic.aspx?fid=416
11 ноя 09, 14:40    [7914416]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Гавриленко Сергей Алексеевич
https://www.sql.ru/faq/faq_topic.aspx?fid=416

Спасибо.
Вариант:
----------------
create table #dataset(
parameter_name varchar(100),
column_type varchar(150),
data_type varchar(100),
type_name varchar(100),
PRECISION int,
length int,
scale int,
radix varchar(100),
nullable varchar(100),
sql_data_type varchar(100),
sql_datetime_sub varchar(100),
char_octet_length int,
ordinal_position int
)
insert #dataset exec sp_batch_params @SQLString

select *
from #dataset

drop table #dataset
-------------------
сработал.
Остается вопрос: почему разработчики сервера оформили код, возвращающий таблицу данных, процедурой?
А если сделали обоснованно, то почему в помощи к такой процедуре не дали рецепт получения данных. Накой она иначе нужна?
Но это не к вам :)
11 ноя 09, 15:05    [7914628]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB

Остается вопрос: почему разработчики сервера оформили код, возвращающий таблицу данных, процедурой?
А если сделали обоснованно, то почему в помощи к такой процедуре не дали рецепт получения данных. Накой она иначе нужна?

Потому что эта процедура для возврата данных клиентскому приложению ??
11 ноя 09, 15:07    [7914640]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Рано я обрадовался ....
Мне надо вернуть список параметров в запросе.
Тоесть - табличная функция.
А в ней объявлять и применять таблицу #dataset нельзя. Итого - тупик.
11 ноя 09, 15:43    [7915004]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB
Рано я обрадовался ....
Мне надо вернуть список параметров в запросе.
Тоесть - табличная функция.
А в ней объявлять и применять таблицу #dataset нельзя. Итого - тупик.

А select * from #dataset в процедуре разве не возвращает ваш "список параметров" ?
11 ноя 09, 15:45    [7915018]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory
AlexeyAB
Рано я обрадовался ....
Мне надо вернуть список параметров в запросе.
Тоесть - табличная функция.
А в ней объявлять и применять таблицу #dataset нельзя. Итого - тупик.

А select * from #dataset в процедуре разве не возвращает ваш "список параметров" ?

В процедуре - да, но мне надо это сделать в функции, а там использовать временные таблицы нельзя ....
11 ноя 09, 15:52    [7915091]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB
Glory
AlexeyAB
Рано я обрадовался ....
Мне надо вернуть список параметров в запросе.
Тоесть - табличная функция.
А в ней объявлять и применять таблицу #dataset нельзя. Итого - тупик.

А select * from #dataset в процедуре разве не возвращает ваш "список параметров" ?

В процедуре - да, но мне надо это сделать в функции, а там использовать временные таблицы нельзя ....

В функции и просто EXECUTE sp_batch_params @SQLString нельзя сделать
Так что ищите другой путь
11 ноя 09, 15:53    [7915101]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory
AlexeyAB

Остается вопрос: почему разработчики сервера оформили код, возвращающий таблицу данных, процедурой?
А если сделали обоснованно, то почему в помощи к такой процедуре не дали рецепт получения данных. Накой она иначе нужна?

Потому что эта процедура для возврата данных клиентскому приложению ??

А можно подсказку как именно вернуть результат работы процедуры в виде таблицы клиентскому приложению (Delphi)?
Одно значение - знаю.
Таблицу как результат SELECT - знаю,
но таблица - результат исполнения процедуры ....
Напрашивается только скрипт:
-----------------------------
create table #dataset(
parameter_name varchar(100),
column_type varchar(150),
data_type varchar(100),
type_name varchar(100),
PRECISION int,
length int,
scale int,
radix varchar(100),
nullable varchar(100),
sql_data_type varchar(100),
sql_datetime_sub varchar(100),
char_octet_length int,
ordinal_position int
)
insert #dataset exec sp_batch_params @SQLString

select *
from #dataset

drop table #dataset
---------------------
но это как-то через зад ...
И не уверен что сработает. Последняя команда drop table может помешать, а без нее заморочки с временной таблицей ...
11 ноя 09, 15:59    [7915143]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
select * from #dataset и так возвращеи "результат работы процедуры в виде таблицы клиентскому приложению"
11 ноя 09, 16:01    [7915162]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Удивительно только, что ваш клиент почему то сразу не хочет вызвать sp_batch_params с нужным параметром
11 ноя 09, 16:03    [7915180]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory
Удивительно только, что ваш клиент почему то сразу не хочет вызвать sp_batch_params с нужным параметром

Клиент передает параметр В процедуру без проблем.
Разработчики клиентских компонент для работы с БД никак не предполагали, что процедура может возвращать что-то иное, кроме одного значения (помимо возвращаемых параметров)...
В классическом понимании процедуры я бы вообще ничего кроме возвращаемых параметров не ожидал. У процедуры описан один параметр и он входной. Откуда возвращаемый параметр, да еще таблица? Это уже не процедура, а черт (пардон, Microsoft) знает что !
11 ноя 09, 16:17    [7915296]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
iljy
Member

Откуда:
Сообщений: 8711
AlexeyAB,

ваши разработчики клиентских компонент не удосужились выяснить, что такое хранимая процедура SQL. Это отнюдь не изобретение микрософт, а стандарт.
11 ноя 09, 16:20    [7915322]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB
Glory
Удивительно только, что ваш клиент почему то сразу не хочет вызвать sp_batch_params с нужным параметром

Клиент передает параметр В процедуру без проблем.
Разработчики клиентских компонент для работы с БД никак не предполагали, что процедура может возвращать что-то иное, кроме одного значения (помимо возвращаемых параметров)...
В классическом понимании процедуры я бы вообще ничего кроме возвращаемых параметров не ожидал. У процедуры описан один параметр и он входной. Откуда возвращаемый параметр, да еще таблица? Это уже не процедура, а черт (пардон, Microsoft) знает что !

Вы путаете процедуру с функцией
Процедура в TSQL - это скрипт команд, хранящийся на сервере
Все результаты всех команд этого скрипта сервер отправляет клиенту.
Если вам претит такое поведение процедур, то лучше поменять СУБД
11 ноя 09, 16:21    [7915342]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
iljy
AlexeyAB,

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


Разработчики не мои. Разработчики Delphi.
Но в данном случае я охотно их "прикрою" от нападок.
Такая процедура как вы описываете - изобретение Microsoft.
Классическое определение процедур и функций в Википедии следующие:
■Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность — она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания. Подробнее см. в статье Функция (программирование).
■Процедура — это любая подпрограмма, которая не является функцией.


Так что спорить вам придется не только со мной .... :)

Скажу так, вольное обращение с давно придуманной и продуманной терминологией, за Microsoft давно замечено ....

От себя уточню. Процедура в отличии от функции не является выражением и возвращает результат своей работы только через параметры. Процедура СУБД может записывать результаты своей работы в таблицы БД.
В СУБД Oracle есть встроенные "сервисные" процедуры, записывающие результат во временные таблицы, но такие процедуры всегда содержатся в пакетах и в этих же пакетах имеются функции, возвращающие результат из временных таблиц. Вызываешь процедуру, потом функцию и пользуешься результатом. При этом где там таблица, как выглядит, сколько живет и т.д. пользователя пакета не волнует...

Вот такой "пакет" я и вынужден сейчас "мастерить" ...
11 ноя 09, 16:57    [7915589]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB

Такая процедура как вы описываете - изобретение Microsoft.
Классическое определение процедур и функций в Википедии следующие:
■Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность — она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания. Подробнее см. в статье Функция (программирование).
■Процедура — это любая подпрограмма, которая не является функцией.

Извините, а вы по Википедии синтаксисы всех СУБД изучаете ?


AlexeyAB

От себя уточню. Процедура в отличии от функции не является выражением и возвращает результат своей работы только через параметры. Процедура СУБД может записывать результаты своей работы в таблицы БД.
В СУБД Oracle есть встроенные "сервисные" процедуры, записывающие результат во временные таблицы, но такие процедуры всегда содержатся в пакетах и в этих же пакетах имеются функции, возвращающие результат из временных таблиц. Вызываешь процедуру, потом функцию и пользуешься результатом. При этом где там таблица, как выглядит, сколько живет и т.д. пользователя пакета не волнует...

Вот такой "пакет" я и вынужден сейчас "мастерить" ...

В то время как все другие просто используют сразу вызов процедур через клиентские кампоненты. Например, через ADO
11 ноя 09, 17:02    [7915623]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory
AlexeyAB

Такая процедура как вы описываете - изобретение Microsoft.
Классическое определение процедур и функций в Википедии следующие:
■Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность — она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания. Подробнее см. в статье Функция (программирование).
■Процедура — это любая подпрограмма, которая не является функцией.

Извините, а вы по Википедии синтаксисы всех СУБД изучаете ?

Не старайтесь унизить собеседника - это первый признак отсутствия способности слушать и учиться... Звание знатока и\или эксперта не пожизненно :)

Я, конечно, особенности СУБД от Microsoft учту, тем более это не первая особенность. Жаль потраченного времени ... А при возможности, безусловно, воспользуюсь другой СУБД :)
11 ноя 09, 17:18    [7915745]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB

Не старайтесь унизить собеседника - это первый признак отсутствия способности слушать и учиться... Звание знатока и\или эксперта не пожизненно :)

Я, конечно, особенности СУБД от Microsoft учту, тем более это не первая особенность. Жаль потраченного времени ... А при возможности, безусловно, воспользуюсь другой СУБД :)

Унизить ? Мне просто инетересен ваш источник знаний. Особенно так сказать в теоретической части - что имеет право называться процедурой, а что не имеет.
11 ноя 09, 17:22    [7915773]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
Glory
[quot AlexeyAB]
Классическое определение процедур и функций в Википедии следующие:


классическое определение для чего? В больнице тоже есть и функции персонала и процедуры для больных - но никто же не пытается применить одно определение для всего.

Знал я человека, которые говорил что программы пишет. Оказалось для театра программки составляет.

Не стоит же смешивать описания функций декларативного языка и процедурного.
11 ноя 09, 17:38    [7915864]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
iljy
Member

Откуда:
Сообщений: 8711
AlexeyAB
iljy
AlexeyAB,

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


Разработчики не мои. Разработчики Delphi.
Но в данном случае я охотно их "прикрою" от нападок.
Такая процедура как вы описываете - изобретение Microsoft.

Да ну?
http://www.benslade.com/tech/OldIntroToSybase/storproc.html
http://www.compress.ru/article.aspx?id=10936&iid=439

Microsoft SQL Server — прямой потомок Sybase SQL Server.

Доступ посредством BDE

Этот способ доступа не является рекомендуемым, однако для многих приложений, написанных еще для версии 6.х, он может понадобиться из соображений обратной совместимости.

Хорошо, не стандарт де юре, но и отнюдь не изобретение микрософт. А вы пытаетесь использовать устаревший и не рекомендованный способ работы, и еще возмущаетесь.
AlexeyAB

От себя уточню. Процедура в отличии от функции не является выражением и возвращает результат своей работы только через параметры. Процедура СУБД может записывать результаты своей работы в таблицы БД.
В СУБД Oracle есть встроенные "сервисные" процедуры, записывающие результат во временные таблицы, но такие процедуры всегда содержатся в пакетах и в этих же пакетах имеются функции, возвращающие результат из временных таблиц. Вызываешь процедуру, потом функцию и пользуешься результатом. При этом где там таблица, как выглядит, сколько живет и т.д. пользователя пакета не волнует...

Вот такой "пакет" я и вынужден сейчас "мастерить" ...

А зачем собственно? Можно и из табуретки утюг сделать, но проще сразу получить рекордсет, возвращенный процедурой, на клиенте. И не думать - что там за таблица, где она живет и зачем она вообще нужна.
11 ноя 09, 17:59    [7916033]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
iljy

Microsoft SQL Server — прямой потомок Sybase SQL Server.

Доступ посредством BDE

Этот способ доступа не является рекомендуемым, однако для многих приложений, написанных еще для версии 6.х, он может понадобиться из соображений обратной совместимости.

Хорошо, не стандарт де юре, но и отнюдь не изобретение микрософт. А вы пытаетесь использовать устаревший и не рекомендованный способ работы, и еще возмущаетесь.
[/quot]

Начну с "родной" документации:
--------------------------------
Функции (Transact-SQL)
Версия SQL Server 2005 содержит множество встроенных функций, а также поддерживает создание определяемых пользователем функций. Категории встроенных функций перечислены на этой странице. Дополнительные сведения об определяемых пользователем функциях см. в разделе Пользовательские функции (компонент Database Engine).
Типы функций
Функция Описание
Функции работы с наборами строк
Возвращают объект, который можно использовать так же, как табличные ссылки в SQL-инструкции.
Статистические функции
Обрабатывают коллекцию значений и возвращают одно результирующее значение.
Ранжирующие функции
Возвращают ранжирующее значение для каждой строки в секции.
Скалярные функции Обрабатывают и возвращают одиночное значение. Скалярные функции можно применять везде, где выражение допустимо.


CREATE PROCEDURE (Transact-SQL)
Создает хранимую процедуру. Хранимая процедура — это сохраненная совокупность инструкций языка Transact-SQL или ссылка на метод среды CLR платформы Microsoft .NET Framework, которая может принимать и возвращать предоставленные пользователем параметры. Процедуры можно создавать для постоянного использования, для временного использования в одном сеансе (локальная временная процедура) или для временного использования во всех сеансах (глобальная временная процедура).
--------------------------------
Как видите, приведенные мной выше классические определения процедур и функции полностью подтверждены микрософт.

Отсюда и возмущение. Не хочешь как принято, так напиши в документации (как минимум)!
Да, я возмущен "кривизной" коммерческого продукта, частым несоответствием терминов их "содержанию". Кто-то имеет время на изучение неожиданных чудес от микрософт, радуется "открытиям" и смотрит свысока на меня и мне подобных. А мне нужно сделать продукт, работающий на основе инструмента от микрософт. И такие "вкусности" от микрософт для меня лишь палки в колеса. Да, возможностей много, но они совсем не очевидны и часто не документированы. Их надо "добывать". А в текущей работе существенно чаще возникают проблемы на ровном месте, когда нужен "банальный" функционал и чудес совсем не ждешь. А это НЕ радует.
iljy

AlexeyAB

От себя уточню. Процедура в отличии от функции не является выражением и возвращает результат своей работы только через параметры. Процедура СУБД может записывать результаты своей работы в таблицы БД. В СУБД Oracle есть встроенные "сервисные" процедуры, записывающие результат во временные таблицы, но такие процедуры всегда содержатся в пакетах и в этих же пакетах имеются функции, возвращающие результат из временных таблиц. Вызываешь процедуру, потом функцию и пользуешься результатом. При этом где там таблица, как выглядит, сколько живет и т.д. пользователя пакета не волнует...

Вот такой "пакет" я и вынужден сейчас "мастерить" ...

А зачем собственно? Можно и из табуретки утюг сделать, но проще сразу получить рекордсет, возвращенный процедурой, на клиенте. И не думать - что там за таблица, где она живет и зачем она вообще нужна.


Потому что получать таблицу с переменными запроса и выполнять запрос мне надо с одними правами, а клиентское приложение работает с другими правами. Защита информации ...
И не предлагайте использовать application role. Спрятать в коде приложения пароль для подключения с application role реально нельзя.
12 ноя 09, 12:45    [7919604]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB

Отсюда и возмущение. Не хочешь как принято, так напиши в документации (как минимум)!
Да, я возмущен "кривизной" коммерческого продукта, частым несоответствием терминов их "содержанию". Кто-то имеет время на изучение неожиданных чудес от микрософт, радуется "открытиям" и смотрит свысока на меня и мне подобных. А мне нужно сделать продукт, работающий на основе инструмента от микрософт. И такие "вкусности" от микрософт для меня лишь палки в колеса. Да, возможностей много, но они совсем не очевидны и часто не документированы. Их надо "добывать". А в текущей работе существенно чаще возникают проблемы на ровном месте, когда нужен "банальный" функционал и чудес совсем не ждешь. А это НЕ радует.

А по-моему, у кого то просто руки кривые. И он пытается опыт программирования одного языка применять в другом. И в результате получает велосипед с квадратными колесами
12 ноя 09, 12:52    [7919661]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
iljy
Member

Откуда:
Сообщений: 8711
AlexeyAB
iljy

Microsoft SQL Server — прямой потомок Sybase SQL Server.

Доступ посредством BDE

Этот способ доступа не является рекомендуемым, однако для многих приложений, написанных еще для версии 6.х, он может понадобиться из соображений обратной совместимости.

Хорошо, не стандарт де юре, но и отнюдь не изобретение микрософт. А вы пытаетесь использовать устаревший и не рекомендованный способ работы, и еще возмущаетесь.


Начну с "родной" документации:
--------------------------------
Функции (Transact-SQL)
Версия SQL Server 2005 содержит множество встроенных функций, а также поддерживает создание определяемых пользователем функций. Категории встроенных функций перечислены на этой странице. Дополнительные сведения об определяемых пользователем функциях см. в разделе Пользовательские функции (компонент Database Engine).
Типы функций
Функция Описание
Функции работы с наборами строк
Возвращают объект, который можно использовать так же, как табличные ссылки в SQL-инструкции.
Статистические функции
Обрабатывают коллекцию значений и возвращают одно результирующее значение.
Ранжирующие функции
Возвращают ранжирующее значение для каждой строки в секции.
Скалярные функции Обрабатывают и возвращают одиночное значение. Скалярные функции можно применять везде, где выражение допустимо.


CREATE PROCEDURE (Transact-SQL)
Создает хранимую процедуру. Хранимая процедура — это сохраненная совокупность инструкций языка Transact-SQL или ссылка на метод среды CLR платформы Microsoft .NET Framework, которая может принимать и возвращать предоставленные пользователем параметры. Процедуры можно создавать для постоянного использования, для временного использования в одном сеансе (локальная временная процедура) или для временного использования во всех сеансах (глобальная временная процедура).
--------------------------------
Как видите, приведенные мной выше классические определения процедур и функции полностью подтверждены микрософт.

Хранимая процедура — это сохраненная совокупность инструкций языка Transact-SQL , тут хоть где-нибудь сказано, что это не может быть инструкция SELECT?? К тому же термин "Хранимая процедура" определен только для SQL, по-крайней мере мне больше нигде не встречался.
AlexeyAB

Отсюда и возмущение. Не хочешь как принято, так напиши в документации (как минимум)!
Да, я возмущен "кривизной" коммерческого продукта, частым несоответствием терминов их "содержанию". Кто-то имеет время на изучение неожиданных чудес от микрософт, радуется "открытиям" и смотрит свысока на меня и мне подобных. А мне нужно сделать продукт, работающий на основе инструмента от микрософт. И такие "вкусности" от микрософт для меня лишь палки в колеса. Да, возможностей много, но они совсем не очевидны и часто не документированы. Их надо "добывать". А в текущей работе существенно чаще возникают проблемы на ровном месте, когда нужен "банальный" функционал и чудес совсем не ждешь. А это НЕ радует.

Откуда эта сказочная манера - объяснять собственную ограниченность и кривизну рук ссылками на чью-то очень злую волю? Если уж врага ищите - так хоть ищите нормально. Это не микрософт придумал, а доктор Роберт Эпштейн (Dr. Robert Epstein) и Том Хаггин (Tom Haggin), архитекторы Sybase, — оба они работали на Бритон-Ли и Университет Калифорния, Беркли. И было это очень давно, так что надо не чудес от функционала ждать, а изучать его лучше. И не делать априорных предположений о декларативном языке на основе своих знаний о процедурных.

AlexeyAB

iljy

AlexeyAB

От себя уточню. Процедура в отличии от функции не является выражением и возвращает результат своей работы только через параметры. Процедура СУБД может записывать результаты своей работы в таблицы БД. В СУБД Oracle есть встроенные "сервисные" процедуры, записывающие результат во временные таблицы, но такие процедуры всегда содержатся в пакетах и в этих же пакетах имеются функции, возвращающие результат из временных таблиц. Вызываешь процедуру, потом функцию и пользуешься результатом. При этом где там таблица, как выглядит, сколько живет и т.д. пользователя пакета не волнует...

Вот такой "пакет" я и вынужден сейчас "мастерить" ...

А зачем собственно? Можно и из табуретки утюг сделать, но проще сразу получить рекордсет, возвращенный процедурой, на клиенте. И не думать - что там за таблица, где она живет и зачем она вообще нужна.


Потому что получать таблицу с переменными запроса и выполнять запрос мне надо с одними правами, а клиентское приложение работает с другими правами. Защита информации ...
И не предлагайте использовать application role. Спрятать в коде приложения пароль для подключения с application role реально нельзя.

me
надо не чудес от функционала ждать, а изучать его лучше.

Вы про такую вещь, как EXECUTE AS слышали?
12 ноя 09, 13:03    [7919792]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory
AlexeyAB

Отсюда и возмущение. Не хочешь как принято, так напиши в документации (как минимум)!
Да, я возмущен "кривизной" коммерческого продукта, частым несоответствием терминов их "содержанию". Кто-то имеет время на изучение неожиданных чудес от микрософт, радуется "открытиям" и смотрит свысока на меня и мне подобных. А мне нужно сделать продукт, работающий на основе инструмента от микрософт. И такие "вкусности" от микрософт для меня лишь палки в колеса. Да, возможностей много, но они совсем не очевидны и часто не документированы. Их надо "добывать". А в текущей работе существенно чаще возникают проблемы на ровном месте, когда нужен "банальный" функционал и чудес совсем не ждешь. А это НЕ радует.

А по-моему, у кого то просто руки кривые. И он пытается опыт программирования одного языка применять в другом. И в результате получает велосипед с квадратными колесами


А помоему документация хотя бы "по крупному" должна соответствовать реализации, или вы мое сообщение даже не прочитали?

Напоминаю, что ваша должность "модератор", а первая обязанность модератора ресурса класса sql.ru - прекращать хамство.

Вы здесь "на работе" и, вероятно, имеете время для изучения "вкусностей" и наслаждения своими открытиями. Это же подтверждает количество ваших сообщений в форуме, но вот стиль "у кого откуда руки" (обоснованно или нет - не важно) я достижением и основанием для вашего высокого самомнения не считаю. Более того, сомнения есть в вашей "грамотности". На мой исходный вопрос грамотно и эффективно ответил другой человек. А вы похоже чаще язык чешете ...
12 ноя 09, 13:11    [7919904]     Ответить | Цитировать Сообщить модератору
 Re: Как получить таблицу - результат sp_batch_param после вызова в процедуре?  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB

А помоему документация хотя бы "по крупному" должна соответствовать реализации, или вы мое сообщение даже не прочитали?

Вы бы ее сначала почитали, документацию то
Вместо создания гневных постов о фирме MS
12 ноя 09, 13:17    [7919967]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить