Действительно ли возможно отправить набор идентификатора как параметр SQL ADO.NET?

Работает 100%.

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}
20
задан Blair Conrad 19 November 2008 в 18:10
поделиться

5 ответов

Обычно способ, которым Вы делаете это, состоит в том, чтобы передать в разделенном запятыми списке значений, и в рамках Вашей хранимой процедуры, проанализировать список и вставить его во временную таблицу, которую можно затем использовать для соединений. С SQL-сервер 2005 , это - общепринятая практика для контакта с параметрами, которые должны содержать массивы.

Вот хорошая статья о различных способах иметь дело с этой проблемой:

Передача списка/массива к хранимой процедуре

SQL Server, Но для SQL-сервер 2008 , мы наконец добираемся для передачи табличных переменных в процедуры первым определением таблицы как пользовательский тип.

существует хорошее описание этого (и больше 2 008 функций) в этой статье:

Введение в Новые Функции Программируемости T-SQL в SQL Server 2008

17
ответ дан 30 November 2019 в 01:11
поделиться

Вы можете с SQL 2008 . Это не отсутствовало очень долго, но это доступно.

5
ответ дан 30 November 2019 в 01:11
поделиться

Можно использовать xml тип параметра:

CREATE PROCEDURE SelectByIdList(@productIds xml) AS

DECLARE @Products TABLE (ID int) 

INSERT INTO @Products (ID) SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @productIds.nodes('/Products/id') as ParamValues(ID) 

SELECT * FROM 
    Products
INNER JOIN 
    @Products p
ON    Products.ProductID = p.ID

http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx

1
ответ дан 30 November 2019 в 01:11
поделиться

Нет. Параметры похожи на значения SQL в повиновении первая нормальная форма , в основном, может только быть тот...

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

-2
ответ дан 30 November 2019 в 01:11
поделиться

Вы не можете передать список как единственный Параметр SQL. Вы могли представить в виде строки. Соединение ('') ГУИДЫ такой как "0000-0000-0000-0000, 1111-1111-1111-1111", но это было бы высоко на базе данных, служебной и субоптимальной действительно. И необходимо передать целую строку как единственный связанный динамический оператор, Вы не можете добавить его в качестве параметра.

Вопрос:

, Где Вы получаете свой список идентификатора, от которого представляют неактивных клиентов?

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

    Create procedure usp_DeactivateCustomers 
    @inactive varchar(50) /*or whatever values are required to identify inactive customers*/
    AS    
    UPDATE Customer SET c.Active = 0 
    FROM Customer c JOIN tableB b ON c.CustomerID = b.CustomerID 
    WHERE b.someField = @inactive

И вызов это как хранимая процедура:

public void InactiveCustomers(string inactive)
{
    //...
    myAdoCommand.CommandText =
        "usp_DeactivateCustomers";
    myAdoCommand.Parameters["@inactive"].Value = inactive;
    //...
}
<час>

, Если список GUID существует в базе данных, почему, я должен: найдите их; поместите их в универсальный список; раскрутите список в CSV/XML/Table переменную, только для представления их назад DB снова????? Они уже там! Я пропускаю что-то?

-3
ответ дан 30 November 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: