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

Откуда:
Сообщений: 1197
Привет!

Есть таблица Guests c полем GuestId. В процедуру передается массив GuestId через запятую.
Вопрос верно ли написан запрос по возврату всех гостей?

declare @guests nvarchar(max)
set @guests = '598,11124,1113,1121,1123'

select * from [pms].[db_pms].[guests]
where @guests like '%' + Convert(nvarchar, GuestID) + '%'
18 сен 09, 12:06    [7678112]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
https://www.sql.ru/forum/actualtopics.aspx?search=%EC%E0%F1%F1%E8%E2%FB+%E8+%F1%EF%E8%F1%EA%E8&submit=%CD%E0%E9%F2%E8&bid=1
18 сен 09, 12:06    [7678118]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
Гавриленко Сергей Алексеевич
https://www.sql.ru/forum/actualtopics.aspx?search=%EC%E0%F1%F1%E8%E2%FB+%E8+%F1%EF%E8%F1%EA%E8&submit=%CD%E0%E9%F2%E8&bid=1


у меня простой селект и вроде как работает. хочется узнать может не учел что-то
18 сен 09, 12:11    [7678155]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
Гавриленко Сергей Алексеевич
https://www.sql.ru/forum/actualtopics.aspx?search=%EC%E0%F1%F1%E8%E2%FB+%E8+%F1%EF%E8%F1%EA%E8&submit=%CD%E0%E9%F2%E8&bid=1


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

И куда попадет запись с GuestID=111 ?
18 сен 09, 12:12    [7678177]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
relief,

Массивы и списки в MS SQL Server
18 сен 09, 12:15    [7678191]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'
18 сен 09, 12:22    [7678249]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'


И куда попадет запись с GuestID=3 ?
18 сен 09, 12:24    [7678267]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
relief
Привет!

Есть таблица Guests c полем GuestId. В процедуру передается массив GuestId через запятую.
Вопрос верно ли написан запрос по возврату всех гостей?

declare @guests nvarchar(max)
set @guests = '598,11124,1113,1121,1123'

select * from [pms].[db_pms].[guests]
where N','+@guests+N',' like N'%,' + Convert(nvarchar, GuestID) + N',%'
При большом количестве медленно работать будет, однако!
18 сен 09, 12:24    [7678268]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
DENIS_CHEL
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'


И куда попадет запись с GuestID=3 ?


так все ок
18 сен 09, 12:26    [7678282]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
relief
DENIS_CHEL
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'


И куда попадет запись с GuestID=3 ?


так все ок


хм... у вас в строке ';598|;11124|;1113|;1121|;1123|;' нету гостя с ID 3 или я не прав?
18 сен 09, 12:30    [7678303]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Мой вам совет извлечь из @guests все id, поместить их в табличную переменную, и ее уже джонить с [pms].[dbo].[guests]

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
18 сен 09, 12:36    [7678351]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
DENIS_CHEL
relief
DENIS_CHEL
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'


И куда попадет запись с GuestID=3 ?


так все ок


хм... у вас в строке ';598|;11124|;1113|;1121|;1123|;' нету гостя с ID 3 или я не прав?



я не понимаю Вас. в таблице есть гость с кодом 3, в запросе его нет. Мой селект его не вернет.
18 сен 09, 13:25    [7678733]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'

Т.е. какое-то приложение будет париться и собирать строку нужного формата вместо того, чтобы сразу эти значения записывать в серверную таблицу ?
18 сен 09, 13:30    [7678781]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'

Т.е. какое-то приложение будет париться и собирать строку нужного формата вместо того, чтобы сразу эти значения записывать в серверную таблицу ?


наглядный пример:
есть таблица со списком гостей. Юзер чекает нужных ему гостей. Как Вы себе видите получение инфы из базы? Сейчас выделенные гости собираются в строку и передаются в процедуру. Может лучше вариант подскажите - буду признателен
18 сен 09, 13:40    [7678860]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
relief

я не понимаю Вас. в таблице есть гость с кодом 3, в запросе его нет. Мой селект его не вернет.

Вы правы, я не внимательно посмотрел...

И тем не менее, посчему не хотите зделать, как советует Glory?
18 сен 09, 13:41    [7678868]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
Glory
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'

Т.е. какое-то приложение будет париться и собирать строку нужного формата вместо того, чтобы сразу эти значения записывать в серверную таблицу ?


наглядный пример:
есть таблица со списком гостей. Юзер чекает нужных ему гостей. Как Вы себе видите получение инфы из базы? Сейчас выделенные гости собираются в строку и передаются в процедуру. Может лучше вариант подскажите - буду признателен

Да просто вижу - каждое чекание обрабатывается событием, которое и заносит отчекаенное значение в таблицу. А потом кнопка ОК запускает запрос
18 сен 09, 13:41    [7678875]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
relief
Glory
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'

Т.е. какое-то приложение будет париться и собирать строку нужного формата вместо того, чтобы сразу эти значения записывать в серверную таблицу ?


наглядный пример:
есть таблица со списком гостей. Юзер чекает нужных ему гостей. Как Вы себе видите получение инфы из базы? Сейчас выделенные гости собираются в строку и передаются в процедуру. Может лучше вариант подскажите - буду признателен
Элементарно. Формируем скрипт вызова процедуры с предварительным заполнением временной таблицы выбранными значениями.
В процедуре эта временная таблица используется в JOINах с нужными таблицами.
18 сен 09, 13:44    [7678894]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
Glory
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'

Т.е. какое-то приложение будет париться и собирать строку нужного формата вместо того, чтобы сразу эти значения записывать в серверную таблицу ?


наглядный пример:
есть таблица со списком гостей. Юзер чекает нужных ему гостей. Как Вы себе видите получение инфы из базы? Сейчас выделенные гости собираются в строку и передаются в процедуру. Может лучше вариант подскажите - буду признателен

Да просто вижу - каждое чекание обрабатывается событием, которое и заносит отчекаенное значение в таблицу. А потом кнопка ОК запускает запрос


По каждому чеку лезть в базу? Вы это серьезно?!
18 сен 09, 13:49    [7678930]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Glory
Member

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


По каждому чеку лезть в базу? Вы это серьезно?!

А что такого страшного в INSERT-е размером в несколько байт раз пару секунд ?
18 сен 09, 13:51    [7678943]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

Откуда:
Сообщений: 1197
iap
relief
Glory
relief
хорошо. тогда так
declare @guests nvarchar(max)
set @guests = ';598|;11124|;1113|;1121|;1123|;'

select * from [pms].[dbo].[guests]
Where @Guests like '%;' + Convert(nvarchar, GuestID) + '|;%'

Т.е. какое-то приложение будет париться и собирать строку нужного формата вместо того, чтобы сразу эти значения записывать в серверную таблицу ?


наглядный пример:
есть таблица со списком гостей. Юзер чекает нужных ему гостей. Как Вы себе видите получение инфы из базы? Сейчас выделенные гости собираются в строку и передаются в процедуру. Может лучше вариант подскажите - буду признателен
Элементарно. Формируем скрипт вызова процедуры с предварительным заполнением временной таблицы выбранными значениями.
В процедуре эта временная таблица используется в JOINах с нужными таблицами.


т.е. Вы предлагаете как и Glory по каждому чеку заносить во временную таблицу в базе это значение?! Вы что?! Операция по сбору строки и селект будет на порядок быстрей работать чем постоянно в базу лазить! А если юзер почекал у ушел, что делать? Да и ресурсы тут задействуются СУБД
18 сен 09, 13:52    [7678955]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Glory
Member

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

т.е. Вы предлагаете как и Glory по каждому чеку заносить во временную таблицу в базе это значение?! Вы что?! Операция по сбору строки и селект будет на порядок быстрей работать чем постоянно в базу лазить! А если юзер почекал у ушел, что делать? Да и ресурсы тут задействуются СУБД

Что такое есть ваше "лазить в базу" ? Что такое "постянно лазить" ?
По-моему, вы просто не понимаете сути
18 сен 09, 13:54    [7678968]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Glory,

кажется автор не хочет быстродействия, а хочет красивого кода
18 сен 09, 13:56    [7678984]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
relief
Member

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

т.е. Вы предлагаете как и Glory по каждому чеку заносить во временную таблицу в базе это значение?! Вы что?! Операция по сбору строки и селект будет на порядок быстрей работать чем постоянно в базу лазить! А если юзер почекал у ушел, что делать? Да и ресурсы тут задействуются СУБД

Что такое есть ваше "лазить в базу" ? Что такое "постянно лазить" ?
По-моему, вы просто не понимаете сути


Юзер выбрал гостя -> в базе данных вызывается процедура по добавлению записи во временную таблицу. Юзер отчекнул гостя -> в базе данных вызывается процедура по удалени записи из временной таблицы.
18 сен 09, 13:56    [7678986]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
DENIS_CHEL
Member

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

т.е. Вы предлагаете как и Glory по каждому чеку заносить во временную таблицу в базе это значение?! Вы что?! Операция по сбору строки и селект будет на порядок быстрей работать чем постоянно в базу лазить! А если юзер почекал у ушел, что делать? Да и ресурсы тут задействуются СУБД

Что такое есть ваше "лазить в базу" ? Что такое "постянно лазить" ?
По-моему, вы просто не понимаете сути


Юзер выбрал гостя -> в базе данных вызывается процедура по добавлению записи во временную таблицу. Юзер отчекнул гостя -> в базе данных вызывается процедура по удалени записи из временной таблицы.


Что-то я солидарен с французской стюардессой из анекдота: ситуацию понимаю, но проблему не вижу…
18 сен 09, 13:59    [7679006]     Ответить | Цитировать Сообщить модератору
 Re: Select по массиву int в виде nvarchar  [new]
Glory
Member

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

т.е. Вы предлагаете как и Glory по каждому чеку заносить во временную таблицу в базе это значение?! Вы что?! Операция по сбору строки и селект будет на порядок быстрей работать чем постоянно в базу лазить! А если юзер почекал у ушел, что делать? Да и ресурсы тут задействуются СУБД

Что такое есть ваше "лазить в базу" ? Что такое "постянно лазить" ?
По-моему, вы просто не понимаете сути


Юзер выбрал гостя -> в базе данных вызывается процедура по добавлению записи во временную таблицу. Юзер отчекнул гостя -> в базе данных вызывается процедура по удалени записи из временной таблицы.

Ваш юзер чекает со скоростью 1000 нажатий в секунду ? Или что вас беспкоит ?
И почему процедура ?
18 сен 09, 14:00    [7679015]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить