powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / по поводу входных параметров для хранимой процедуры
11 сообщений из 11, страница 1 из 1
по поводу входных параметров для хранимой процедуры
    #32029434
Perez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посоветуйте как быть!

каким образом реализовать ХП с переменным числом входных парметров
причем кол-во переменых теоретически может варьировать от 0 до скажем нескольких десятков, т.е. их все объявлять глупо.
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029439
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подсказываю....Можно создать таблицу и из нее брать записи, как данные, изнутри процедуры.... Подходит ?
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029442
Perez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<input type=checkbox name=v value=1>один
<input type=checkbox name=v value=2>два
<input type=checkbox name=v value=3>три
количество их может быть разным и в процедуру будут передаватся только отмеченные - тоже не известно какие отмечены какие нет.
---
дык вот как передать то их
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029443
Perez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
впринципе в процедуру можно отправить это дело как один параметр("1,2,3"), но как его распарсить в процедуре понятия не имею ((
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029446
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форуме уже обсуждалась такая проблема. Можно действительно передавать параметры как строку и написав соотвутствующую UDF-функцию вытаскивать из нее параметры, или же прямо в клиенте генерить скрипт примерного содержания:

<code>
create table #Params(ParamName varchar(20) not null primary key, ParamValue varchar(50) not null)

-- Здесь прямо из клиента в скрипт заполняются параметры
insert into #Params (ParamName, ParamValue) values ('Param1', '1')
insert into #Params (ParamName, ParamValue) values ('Param2', '2')
-- и т.д.

exec sp_Proc_User

drop table #Params
</code>

Соответствующе из хранимой процедуры спокойно можно получить значения параметров из таблицы #Params (естественно ее структуру надо модернизировать под собственные нужды). Клиенту же достаточно сгенерить такую строку и просто выполнить.
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029464
bik_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему не вызвать процедуру столько раз, сколько параметров?
Типа этого:

create proc my_sp
@param int
as
...
...


а в приложении в рамках транзакции (например, через ADO Connection.BeginTrans и т.п.)
не вызвать my_sp нужное число раз?

Тем более, что у вас простейший случай. А что будет, если потребуется сделать что-то
более-менее сложное для каждого значения v?
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029466
Perez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плиз где можно почитать об UDF как их писать
посмотрел в книжке Мамаева - что-то негусто написано, да и набор функций работы со строками что-то не впечатляет
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029468
bik_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Perez
Об UDF можно почитать в Books Online, что поставляются вкупе с MS SQL Server.
Также есть неплохой ресурс sqlteam.com

Что касается "распарсить в процедуре":

\nCREATE FUNCTION dbo.ItemsList
(
@InputString varchar(4096),
@Separator char(1)
)
RETURNS @MyTable TABLE (MyTableID int)
AS
BEGIN
DECLARE @i int
SET @InputString = @InputString + @Separator
SET @i = CHARINDEX(@Separator, @InputString)
WHILE @i > 0
begin
INSERT INTO @MyTable (MyTableID) SELECT CAST(SUBSTRING(@InputString, 1, @i-1) AS int)
SET @InputString = RIGHT(@InputString, LEN(@InputString) - @i)
SET @i = CHARINDEX(@Separator, @InputString)
end
RETURN
END
GO

SELECT * FROM ItemsList('1,2,3',',')
GO


Ессно, предполагается, что передаются только "целые" числа, разделенные одним
символом (@Separator), причем общей длиной не более 4 кБ. Обработку ошибок
надо сделать самостоятельно.


P.S. И все-таки, парсинг строк - не самый лучший вариант решения...
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029471
Perez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да! здорово! спасибо! подходит ))
а неуж то нет какой-нить готовой процедуры или функции типа как вбскрипте SPLIT?
-
и почему парсинг не лучший вариант? (это из-за того что нада обрабатывать ислючительные ситуации?)
я в том плане чтоб совсем разделить веб и данные/методы_обрабоки_данных
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029472
bik_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а неуж то нет какой-нить готовой процедуры или функции типа как вбскрипте SPLIT?
В T-SQL нет массивов (таблицы не считаем), потому вернуть результаты будет негде, в отличие от VBScript.

и почему парсинг не лучший вариант? (это из-за того что нада обрабатывать ислючительные ситуации?)
я в том плане чтоб совсем разделить веб и данные/методы_обрабоки_данных

Это тебе кажется, что ты разделяешь. На самом деле, ты соединяешь. Посмотри сам: в процедуру передается
символ-разделитель, а он есть "часть" логики представления (presentation logic). А надо бы, чтобы в проц.
шли независимые от интерфейсов данные, то бишь числа, даты (во внутреннем формате, ессно), строки...
Потому все потуги передавать в SP данные в виде строк (даты, например) и далее их парсить - порочны априори.

Мне могут возразить, что в описанном мной варианте надо использовать транзакцию, лежащюю вне хранимых
процедур. Это единственный минус... Кстати, он будет и для способа, когда набор параметров передается
через (временную) таблицу.
...
Рейтинг: 0 / 0
по поводу входных параметров для хранимой процедуры
    #32029479
n1k from home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтож спасибо за исчерпывающие ответы очень помог спасибо ))
--
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / по поводу входных параметров для хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]