Хобрук: Ваш путь к мастерству в программировании

T sql выбирает значение int как кастинг varchar

У меня есть хранимая процедура под названием GetReport.

customers.branches_ID is int type 

однако параметр @Branches - varchar

@Branches: "10 13534 554 776 767"

Я хочу найти 10 13534 554 776 767 в branch_ID, однако, если я приведу/преобразую в varchar, это не сработает для меня.

ALTER PROCEDURE [dbo].[GetReport] 

@fromDate datetime,
@toDate datetime,
@Branches varchar (500) = null

AS
BEGIN

SET NOCOUNT ON; 

select * from customers where

(customers.CreatedDate between @fromDate and @toDate) and

(@Branches is null or CONVERT(varchar(500), customers.branches_ID) in(@Branches )) -- This part is not working for me


END

как я могу решить эту проблему, как я могу искать несколько запятых varcvhar внутри столбца int?

Спасибо.


  • Если возможно, измените дизайн, чтобы использовать тип данных, предназначенный для содержания нескольких элементов данных, таких как xml или табличные параметры. Если вы не можете изменить дизайн, быстрый поиск должен найти множество результатов для sql split commas. T-SQL, как и большинство языков, не пытается проверить содержимое единственного строкового параметра, который вы ему предоставляете, и, обнаружив запятые в этой строке, внезапно решает рассматривать его как несколько параметров. 15.05.2015
  • спасибо за помощь, не могли бы вы поделиться простым примером, после чего я приму лучший ответ, если он работает 15.05.2015
  • aspsnippets.com/Статьи/ 15.05.2015
  • Просто найдите табличные параметры. Ознакомьтесь с этим руководством в MSDN. 15.05.2015
  • @GarethD нет необходимости что-либо разбивать, если OP передает правильный тип, то есть TVP со значениями для поиска 15.05.2015
  • @PanagiotisKanavos Предположительно, вы не читали статьи, поскольку они сосредоточены на необходимости разбивать строки по этой причине, затем оценивают производительность таких методов, как ',' + @ParamList + ',' LIKE '%,' + Column + ',%', а затем, наконец, говорят, что, по возможности, дизайн должен быть адаптирован для использования таблицы ценные параметры. Об этом особо упоминалось в последней статье Разделение строк: теперь с T-SQL. Я согласен с тем, что TVP — лучший способ, но учитывая, что версия SQL Server не помечена, это может быть невозможно. 15.05.2015
  • если вы можете ответить, я приму лучший ответ, спасибо за помощь 15.05.2015
  • Хотя я пометил как дубликат этот вопрос, я не верю, однако, что какой-либо из ответов является таким же окончательным, как серия статей, написанных на эту тему Аароном Бертраном. – Разделяйте строки правильно или следующим способом , Разделение строк: продолжение и Разделение строк: теперь с меньшим количеством T-SQL. 15.05.2015

Ответы:


1

Для этого есть как минимум 4 метода. Вот один:

select * from customers where
customers.CreatedDate between @fromDate and @toDate and 
(@Branches is null or branches_ID
    IN(
         SELECT  y.i.value('(./text())[1]', 'nvarchar(4000)')
         FROM    ( SELECT    x = CONVERT(XML, '<i>' + REPLACE(@Branches, ',', '</i><i>')
                    + '</i>').query('.')
                 ) AS a
         CROSS APPLY x.nodes('i') AS y ( i )))

Ищите другие методы здесь http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

Но вы можете использовать типы с табличным значением для этого типа работы, если вы используете Sql Server 2008 или более позднюю версию.

15.05.2015
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..