Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров в хранимую процедуру, Передача параметров для IN 
:(
    Опции темы
Wilko
Дата 29.8.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Как можно передавать параметры в хранимую процедуру для использования с оператором IN?
Есть листбокс с возможностью выбора множества значений.
Пользователь выбирает ноль или больше значений в этом поле, и этот параметр должен передаваться хранимой процедуре. Процедура вида
Код

CREATE PROCEDURE [dbo].[GetQuerys]
(@RowIndex INT ,
@MaxRows INT,
@Employees nvarchar(50) = null)    
AS
BEGIN
DECLARE @StartRow INT
DECLARE @EndRow INT
 
SET @StartRow = (@RowIndex+1)
SET @EndRow = @StartRow + @MaxRows

    SET NOCOUNT ON;
    SELECT  * FROM (SELECT Q.ID AS Number,E.ShortName,                       
                        ROW_NUMBER() OVER (ORDER BY Q.ID) numberrow                        
                    FROM Queries Q
                        INNER JOIN Employees E ON (E.ID = Q.EmployeeID)                        
                    WHERE E.ID IN (@Employees)
                    ) input  
    WHERE input.numberrow BETWEEN @StartRow AND @EndRow
END

Как можно передать параметр Employee в эту хранимую процедуру? 

Это сообщение отредактировал(а) Wilko - 29.8.2011, 14:15
PM MAIL   Вверх
jonie
Дата 29.8.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата(Wilko @  29.8.2011,  11:55 Найти цитируемый пост)

Как можно передать параметр Employee в эту хранимую процедуру?  

можно:
1. как XML передавать (начиная с MSSQL2005)
2. создать предварительно таблицу (из C#) в этой же сесии с #-ки начинающуюся  использовать в SP её (только SP вызывать из той же сессии иначе таблица умрет).
3. передать ID через запятую и в SQL их пропарисить - гугли про "text to table mssql function delimeter" словам.
4. создать UDF и использовать его (изврат наверно)
5. можно передать текстом через запятую, но в SQL тогда использовать динамический sql, который исполнять через EXEC...

Это сообщение отредактировал(а) jonie - 29.8.2011, 14:08


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Wilko
Дата 29.8.2011, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Видимо забыл добавить, что этот параметр может отсутствовать, т.е. быть NULL(пользователь не выбрал критерия для фильтрации, вывести все записи). Если в других случаях проверки на ISNULL достаточно, то тут такого не пройдет. Только динамический sql подойдет в таком случае?

Это сообщение отредактировал(а) Wilko - 29.8.2011, 14:14
PM MAIL   Вверх
jonie
Дата 29.8.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Почему это "только динамический" ?
Код

....
where field in (some) or some IS NULL



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Wilko
Дата 29.8.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Спасибо, пока работает  smile 


Это сообщение отредактировал(а) Wilko - 29.8.2011, 14:50
PM MAIL   Вверх
Wilko
Дата 30.8.2011, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Понимаю ,может быть стоило создать новую тему или лучше поискать, но задам вопрос здесь)
Эта процедура используется для создания пейджинга, и, конечно же, хотелось бы сразу из нее получать количество строк в резлуьтирующем наборе. Вот только 
Код

SET @PageCount = @@ROWCOUNT

 - не работает, т.к. его можно применить только после всего запроса, а он ограничивает наши записи с помощью @StartRow и @EndRow.
Как можно получить количество записей, которые были выбраны в результате вложенного запрос:
Код

SELECT Q.ID AS Number,E.ShortName,                       
                        ROW_NUMBER() OVER (ORDER BY Q.ID) numberrow                        
                    FROM Queries Q
                        INNER JOIN Employees E ON (E.ID = Q.EmployeeID)                        
                    WHERE E.ID IN ("что-то")

И записать их в переменную @PageCount?

Это сообщение отредактировал(а) Wilko - 30.8.2011, 11:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.