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

Откуда:
Сообщений: 2060
Здравствуйте!

Пусть имеется такой еще сырой SQL-запрос. Нужно выгружать данные в зависимости от того, какие заданы параметры. Например, Надо выгрузить по каким то городам, по каким то клиентам, юр лицам, по ТТ. Учитывая, что задаем, например, определенный клиент, а остальные поля-параметры не задаются. Еще сочетание, например, Города + Клиенты, Юр лица+Код ТТ, и т.д. Возникает вопрос, как написать запрос так, чтобы был универсальным для задании разных параметров.

+SQL-запрос
Declare @Город varchar(8)
Declare @Юрлицо varchar(8)
Declare @Клиент varchar(8)
Declare @КодТТ varchar(8)

SELECT
	[Город],
	[Юр лицо],
	[Клиент],
	[Код ТТ],
	[Отгрузки шт],
	[Возвраты шт],
	[Реализация шт]
FROM
	[База данных]
WHERE
	[Город]= @Город
	AND
	[Юр лицо] = @Юрлицо
	AND
	[Клиент] = @Клиент
	AND
	[Код ТТ] = @КодТТ
19 фев 18, 08:39    [21200706]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
ferzmikk,

[Город]=isnull(@Город,[Город])
19 фев 18, 08:42    [21200707]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
FAQ: Переменное число критериев отбора в запросе
19 фев 18, 08:43    [21200708]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
ferzmikk
Member

Откуда:
Сообщений: 2060
Kopelly
ferzmikk,

[Город]=isnull(@Город,[Город])
Этот случай характерен, если задаем один город, а если несколько городов?
19 фев 18, 08:52    [21200717]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
ferzmikk
а если несколько городов?
Смотря как это сделать... скорее всего, придётся использовать функцию поиска подстроки (или регэксп).
19 фев 18, 09:15    [21200762]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
ferzmikk
Member

Откуда:
Сообщений: 2060
Akina
ferzmikk
а если несколько городов?
Смотря как это сделать... скорее всего, придётся использовать функцию поиска подстроки (или регэксп).

Предположим, @Город = 'Город1,Город2'. Или передача в параметр в виде массива, хотя не знаю возможно ли так в SQL.
19 фев 18, 09:18    [21200767]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
IDVT
Member

Откуда:
Сообщений: 313
ferzmikk
Здравствуйте!

... чтобы был универсальным для задании разных параметров.

[/src][/spoiler]


Динамически собирайте листинг запроса, за тем Exec()
19 фев 18, 09:24    [21200784]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
User2155
Member

Откуда:
Сообщений: 150
.....
where ((@Город is null) or ([Город] = @Город))
or ((@Юрлицо is null) or ([Юрлицо] = @Юрлицо))
or ((@Клиент is null) or ([Клиент] = @Клиент))    


Имейте ввиду, что для тех, кто пишет переменные или столбцы кириллицей в аду приготовлены отдельные
19 фев 18, 09:26    [21200790]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
User2155
Member

Откуда:
Сообщений: 150
кострища. ))
19 фев 18, 09:26    [21200791]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
User2155
Member

Откуда:
Сообщений: 150
Блин, ошибся. В запросе надо "AND" ставить

.....
where ((@Город is null) or ([Город] = @Город))
AND ((@Юрлицо is null) or ([Юрлицо] = @Юрлицо))
AND ((@Клиент is null) or ([Клиент] = @Клиент))
19 фев 18, 09:28    [21200797]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
ferzmikk
Kopelly
ferzmikk,
[Город]=isnull(@Город,[Город])
Этот случай характерен, если задаем один город, а если несколько городов?

Какой вопрос(пример) - такой ответ...
Ты же разбираешь @Город на отдельные значения...
19 фев 18, 09:36    [21200818]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
ferzmikk
Надо выгрузить по каким то городам.
А если несколько городов?
Предположим, @Город = 'Город1,Город2'.
а вы задайте этот вопрос тому кто такую базу спроектировал.
19 фев 18, 09:54    [21200860]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
ferzmikk
Предположим, @Город = 'Город1,Город2'
(@Город IS NULL OR ','+[Город]+',' LIKE '%,'+@Город+',%')
AND (@Юрлицо IS NULL OR ','+[Юрлицо]+',' LIKE '%,'+@Юрлицо+',%')
......................
19 фев 18, 11:35    [21201287]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
ferzmikk
Member

Откуда:
Сообщений: 2060
А если в виде массива передавать, то SQL сможет распознать?
19 фев 18, 11:40    [21201304]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
xml передавайте,в ХП его разбирайте как вам надо
19 фев 18, 11:51    [21201336]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
ferzmikk
Member

Откуда:
Сообщений: 2060
Konst_One
xml передавайте,в ХП его разбирайте как вам надо
Что значит ХП?
19 фев 18, 12:35    [21201504]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
ferzmikk,
Хранимая процедура
19 фев 18, 12:37    [21201511]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Konst_One
Member

Откуда:
Сообщений: 11519
хранимая процедура Stored Procedure
19 фев 18, 12:37    [21201512]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
bideveloper
Member

Откуда:
Сообщений: 503
В SSRS в таких случаях используется IN.
(@Город is null) or ([Город] IN @Город)
19 фев 18, 12:54    [21201570]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
bideveloper
В SSRS в таких случаях используется IN.
(@Город is null) or ([Город] IN @Город)
А это тут при чём?
19 фев 18, 13:15    [21201641]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
bideveloper
Member

Откуда:
Сообщений: 503
iap
А это тут при чём?

ferzmikk
Возникает вопрос, как написать запрос так, чтобы был универсальным для задании разных параметров.

Так работает запрос, когда параметр не указан, указан с одним значением, указан с множеством значений.
19 фев 18, 13:51    [21201821]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
bideveloper,

вам говорят что в TSQL это работать не будет, а то что есть в SSRS остаётся там же :)
19 фев 18, 13:59    [21201870]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
bideveloper
Member

Откуда:
Сообщений: 503
TaPaK,
SSRS запрос на сервер в конечном итоге отправляет в виде T-SQL.
Если вместо @Город подставлять подзапрос по таблице значений параметра, разве не будет работать?
19 фев 18, 14:05    [21201895]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
bideveloper
TaPaK,
SSRS запрос на сервер в конечном итоге отправляет в виде T-SQL.
Если вместо @Город подставлять подзапрос по таблице значений параметра, разве не будет работать?

конечно будет, но нафиг она такая работа надо
19 фев 18, 14:07    [21201904]     Ответить | Цитировать Сообщить модератору
 Re: Разные варианты параметров  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7768
Оптимально - написать приложение, которое будет генерить запросы.
Ту же CLR фабрику, например.
19 фев 18, 14:15    [21201944]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить