Вы запрашиваете одну вещь (строковую константу в MS SQL), но, возможно, вам нужно что-то другое. Причина, по которой я это говорю, заключается в том, что вы дали несколько подсказок о своей конечной цели, которая, похоже, использует одно и то же предложение IN в нескольких хранимых процедурах.
Самая большая подсказка в последнем предложении:
Я пытался передать эту строку как
параметр, чтобы я мог контролировать его из
одна точка в моем приложении
но хранимая процедура не понравилась
это.
Без подробностей ваших SQL-сценариев я попытаюсь использовать некоторые методы психической отладки , чтобы посмотреть, смогу ли я получить вас к тому, что я считаю вашей действительной целью, а не обязательно вашей заявленной целью.
Учитывая, что вашей хранимой процедуре «не понравилось», когда вы пытались передать строку в качестве параметра, я предполагаю, что композиция строки представляла собой просто список значений с разделителями, что-то вроде «10293, 105968, 501940 "или" Сок, Молоко, Пончики "(не обращайте внимания на фактические значения списка - важной частью является сам список с разделителями). И ваш SQL может выглядеть примерно так (опять же, игнорируйте конкретные имена и сосредоточьтесь на общей концепции):
SELECT Column1, Column2, Column3
FROM UnknownTable
WHERE Column1 IN (@parameterString);
Если это приблизительно описывает путь, по которому вы пытались пойти, вам нужно будет пересмотреть свой подход. Используя обычный оператор T-SQL, вы не сможете передать строку значений параметров в предложение IN - он просто не знает, что с ними делать.
Однако есть альтернативы:
Динамический SQL - вы можете создать
весь оператор SQL, параметры и
все, затем выполните это в SQL
база данных. Это, вероятно, не то, что
вы пытаетесь достичь, так как вы
перемещаем скрипт в хранилище
процедуры. Но это указано здесь
для полноты.
Таблица значений -
Вы можете создать таблицу с одним столбцом
который содержит конкретные значения, которые вы
заинтересованы. Тогда ваш хранится
Процедура может просто использовать столбец
из этой таблицы для предложения IN).
Таким образом, нет динамического SQL
требуется. Поскольку вы указываете, что
значения вряд ли изменятся,
возможно, вам просто нужно заполнить
стол один раз, и используйте его везде
подходящее.
Разбор строки в
вывести список значений - Вы можете
передать список значений в виде строки,
затем реализовать код для разбора
список в структуре таблицы на
летать. Альтернативная форма этого
Техника состоит в том, чтобы передать XML
структура, содержащая значения, и
использовать MS SQL Server XML
функциональность для получения таблицы.
Определить функцию табличного значения, которая
возвращает значения для использования - у меня есть
не пробовал этот, так что я могу быть
что-то не хватает, но вы должны быть
возможность определить значения в
табличная функция (возможно, с использованием
куча заявлений UNION или
что-то), и вызвать эту функцию
в предложении IN. Опять же - это
непроверенное предложение и потребуется
чтобы проработать, чтобы определить
это осуществимость.
Надеюсь, это поможет (при условии, что я угадал ваше основное затруднение).
Для дальнейшего использования было бы чрезвычайно полезно, если бы вы могли включить SQL-скрипт, показывающий
структура вашей таблицы и логика хранимых процедур, чтобы мы могли видеть, что вы на самом деле пытались сделать 1045 *. Это значительно повысит эффективность ответов, которые вы получите. Спасибо.
P.S. Ссылка для разбора строк на самом деле включает в себя большое разнообразие методов передачи массивов (то есть списков) информации в хранимые процедуры - это очень хороший ресурс для подобных вещей.