Параметр SSRS multi-select не может записывать значения с запятой

У меня есть параметр multi-select, который имеет запятую в его списке, и мой набор данных использует функцию split для моего параметра, поскольку она находится в SP, так что предложение where выглядит следующим образом:

WHERE [CURRENTPRODATT_DIV_NAME] IN (SELECT VALUE FROM DBO.FnSplit(@ProductDivision,',')) 

и, например, «SMART-UPS 1,5KVA» и «BACK-UPS» были отмечены в параметре multi-select, мультивыбор будет обрабатывать первое значение как два разных значения, которые являются «SMART-UPS 1» и 5KVA «Итак, в моей функции Split он покажет этот результат:

  Row Value 1 SMART-UPS 1 2 5KVA 3 BACK-UPS 

И поскольку «SMART-UPS 1» и «5KVA» не были действительным значением, я не получу записи в разделе «SMART-UPS 1,5KVA».

Может кто-нибудь дать идеи о том, как решить эту проблему? Любой ответ будет очень благодарен.

Ответ на этот вопрос может быть довольно простым: просто используйте другого seperator! (В этом случае я использую «;», но вы можете использовать почти любой символ, который не отображается в вашем LOV.

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

 =Join(Parameters!ProductDivision.Value, ";") 

В вашем SQL-коде измените предложение where

 WHERE [CURRENTPRODATT_DIV_NAME] IN (SELECT VALUE FROM DBO.FnSplit(@ProductDivision,';')) 

Это должно сработать для вас.

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

Если это не вариант:

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

Например, если вы выбрали следующие значения:

  1. SPK,5 2. Joe 3. Dave,Smith 

Вы можете перебирать эти предметы и заменять запятые чем-то вроде десяти звездочек: «**********»

Таким образом, ваша финальная строка будет «SPK ********** 5, Joe, Dave ********** Smith». Вы также хотели бы передать заменяющую строку в качестве второго параметра (так что вы можете изменить свое приложение, не изменяя свой SP).

Затем вы можете использовать следующую логику:

 WHERE [CURRENTPRODATT_DIV_NAME] IN (SELECT REPLACE(VALUE, @SecondParameter, ',') FROM DBO.FnSplit(@ProductDivision,',')) 

Таким образом, все будет правильно разделено, поскольку вы удалили запятые. Затем, когда вы выбираете из этого списка, вы просто заменяете смешную строку символов (в этом примере, десять звездочек) оригинальной запятой.

Для записи вам нужно 100% сделать то, что я изначально предложил. Это ужасный подход, но он вытащит вас из джема.

Поэтому я предполагаю, что строка, которую вы передаете, представляет собой строку, такую ​​как param, value, param, value, и вам нужны только значения из строки.

Если вы знаете, что значения не могут быть «PARAMETER». Вы могли бы сделать так

 declare @params varchar(max) = 'PARAMETER1,AAA,PARAMETER2,BBB' SELECT VALUE FROM dbo.FnSplit(@params,',') WHERE VALUE NOT LIKE 'PARAMETER%' 

Вывод этого запроса

 ---------- AAA BBB 

Редактировать:

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

 declare @params varchar(max) = 'PARAMETER1,AAA,PARAMETER2,BBB'; WITH VALUE AS ( SELECT VALUE, ROW_NUMBER() OVER ( ORDER BY (SELECT 1)) as RN FROM dbo.FnSplit(@params,',') ) SELECT * FROM VALUE WHERE RN % 2 = 0 

Итак, что вы здесь делаете, вы разделяете строку и сохраняете рябь, и вы также знаете, что значения всегда будут иметь равный Rownumber.

Вы можете передавать параметры в качестве параметра таблицы:

 CREATE TABLE #t(ID INT IDENTITY(1,1), CURRENTPRODATT_DIV_NAME VARCHAR(100)); INSERT INTO #t(CURRENTPRODATT_DIV_NAME) VALUES ('SMART-UPS 1,5KVA'), ('BACK-UPS'); DECLARE @t TABLE (val VARCHAR(100)); INSERT INTO @t(val) VALUES ('SMART-UPS 1,5KVA'),('BACK-UPS'); SELECT * FROM #t WHERE CURRENTPRODATT_DIV_NAME IN (SELECT val FROM @t); 

LiveDemo

Вывод:

 ╔════╦═════════════════════════╗ ║ ID ║ CURRENTPRODATT_DIV_NAME ║ ╠════╬═════════════════════════╣ ║ 1 ║ SMART-UPS 1,5KVA ║ ║ 2 ║ BACK-UPS ║ ╚════╩═════════════════════════╝ 
  • Отчет SQL Server Reporting Studio с сообщением «ERROR #» или недопустимой ошибкой типа данных
  • SSRS - повторное использование временной таблицы в нескольких наборах данных
  • SSRS Subreport выполняется несколько раз, я хочу, чтобы он выполнялся один раз
  • Конструктор отчетов SSRS 2012 не запускается с удаленного хоста - 401 Несанкционированный
  • Параметры URL-адреса служб отчетов SQL Server не работают
  • Как перемещать столбцы деталей между родительскими группами в SSRS
  • Цвет клиента в выражении IIF -SSRS
  • Отладка отчета не работает, показывая сообщение об ошибке «Убедитесь, что предоставлены достаточные разрешения» Как решить эту проблему?
  • Как настроить SQL Azure Reporting?
  • Определение отчета SSRS новее, чем сервер
  • Почему мои диаграммы не отображаются в SSRS 2012?
  • Interesting Posts

    Сохраненная процедура против компиляции функций и разницы в производительности

    Регулярные выражения в TSQL

    Как улучшить время ответа на запрос SQL Server

    Как добавить хранимую процедуру в Windows Installer

    Есть ли способ превратить результат sys.fn_varbintohexstr в varbinary?

    Как заменить null на строку, когда столбец имеет тип данных int

    Объедините строки, когда время окончания одного – это время начала другого

    Подавить некоторые предупреждения в SQL Server SSDT

    Как остановить усечение данных при выводе XML из ReportServer с использованием данных, возвращаемых из хранимой процедуры с помощью Powershell (большой файл XML)

    Агрегаты с правой стороны APPLY не могут ссылаться на столбцы с левой стороны

    Будет ли это принудительно повторно инициализировать топологию репликации слияния?

    CASE или AND / OR в условии WHERE. Какова наилучшая практика?

    Как сохранить результат sql без создания таблицы для хранения результата хранимой процедуры

    Может ли Dapper обрабатывать обнуляемые логические / битовые поля?

    Не удается подключиться к локальному компьютеру через SQL Server 2008 Express Management Studio

    Давайте будем гением компьютера.