Nano Hash - криптовалюты, майнинг, программирование

Как передать переменное количество параметров хранимой процедуре SQL Server?

Я использовал SQL Server 2005 для своего небольшого веб-приложения. Хочу передать параметры в ИП. Но есть одно условие. количество параметров, которые можно время от времени изменять. Подумайте, на этот раз я передам имя и адрес, в следующий раз я передам имя, фамилию, адрес,

этот диапазон параметров может быть 1-30,


Ответы:


1

Вы объявляете процедуру с параметрами по умолчанию и вызываете ее с именованными параметрами вместо позиционных:

CREATE PROCEDURE usp_myProcedure
  @name varchar(100) = '',
  @surname varchar(100) = '',
  @address varchar(100) = ''
AS
BEGIN
...
END

чтобы вызвать его из T-SQL:

exec usp_myProcedure @name='John', @surname = 'Doe';
exec usp_myProcedure @name='Jane', @address = '123 Anystreet';

Чтобы вызвать его из C#:

SqlCommand cmd = new SqlCommand('usp_MyProcedure', ...);
cmd.CommandType = commandtype.StoredProcedure;
cmd.Parameters.AddWithValue('@name', 'John');
cmd.Parameters.AddWithValue('@surname', 'Doe');
21.03.2010

2

Вы можете использовать типы XML. Вот пример процедуры:

CREATE PROCEDURE udsp_VariableParams(@params XML)
AS
BEGIN
    DECLARE @vdoc INT
    EXEC sp_xml_preparedocument @vdoc OUTPUT, @params
    SELECT * FROM OPENXML(@vdoc, '/params/param', 1) WITH ([paramname] VARCHAR(40), [paramvalue] VARCHAR(150))
    EXEC sp_xml_removedocument @vdoc    
END

EXEC udsp_VariableParams 
  '<params>
     <param paramname="name" paramvalue="value"/>
     <param paramname="address" paramvalue="value"/>
  </params>'

EXEC udsp_VariableParams 
  '<params>
     <param paramname="name" paramvalue="value"/>
     <param paramname="surname" paramvalue="value"/>
     <param paramname="address" paramvalue="value"/>
  </params>'
21.03.2010
  • Я думаю, что это излишество для проблемы OP, но думаю, что это может быть действительно полезно для проблемы, с которой я сейчас сталкиваюсь! :) Спасибо! +1 22.03.2012

  • 3

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

    e.g.

    CREATE PROCEDURE dbo.Test
     @param1 int, -- Not an optional
     @param2 int = 10, --Optional
     @param3 bit = 0, --Optional
     @param4 varchar(50) = '', --Optional
     @param5 nvarchar(100) = null --Optional
     -- more parameters ..... 
    AS
    BEGIN
    
     -- The SQL goes here...
    
    END
    

    Затем вы можете заполнить необязательные параметры по вашему выбору.

    21.03.2010

    4

    Подготовка и извлечение тегов из XML — это убийца производительности. Несоответствие времени выполнения зависит от того, кэширован план или нет.

    Вместо этого лучше использовать NVARCHAR(MAX). Просто подготовьте строки параметров с парой «@name=Value» и добавьте уникальный разделитель параметров, если это необходимо. Внутри процедуры используйте SUBSTRING, CHARINDEX и т. д. для получения отдельных параметров.

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

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..