Хранимая процедура .. с использованием сервера sql - PullRequest
0 голосов
/ 07 апреля 2011

Может ли кто-нибудь сказать мне, как отправить список идентификаторов в хранимую процедуру в sql.

Мне нужно отправить Список с моего контроллера, чтобы этот список идентификаторов мог выполняться одновременно с помощью хранимой процедуры.

Спасибо

Ответы [ 4 ]

6 голосов
/ 07 апреля 2011

В SQL Server 2008 и более поздних версиях вы можете использовать Табличные параметры

3 голосов
/ 07 апреля 2011

Лучший способ (в 2008 году) - передать его в виде таблицы.До 2008 вы должны были использовать формат CSV VarChar, а затем разделить его.

Прочитайте это: http://www.sommarskog.se/arrays-in-sql-2008.html

1 голос
/ 07 апреля 2011

Похоже, вам нужно что-то вроде этого:

CREATE FUNCTION [dbo].[Split_String]
(
    @ConcatValues VARCHAR(MAX)
)  
RETURNS @Values Table 
(
     Value VARCHAR(MAX)
)
AS  
/**************************************************************************************************************
Purpose:    When called from a stored procedure and passed a character delimited parameter (of String data type values), 
            this function returns a table named "@Values" with a field named "Value" (populated with the parameter list)
            which can then be referenced in the stored procedure.
            This function requires that the delimited paramater have as its first character the delimiter character.

Sample calls: 
            Select * from [dbo].[Split_String](';dog;cat;mouse')
            Select * from [dbo].[Split_String]('| dog| cat| mouse|')        
            Select * from [dbo].[Split_String]('|')     
            Select * from [dbo].[Split_String]('')      

**************************************************************************************************************/

BEGIN 
    --Indexes to keep the position of searching
    DECLARE @Delim CHAR(1)
    Declare @Pos1 Int
    Declare @Pos2 Int

    --Identify delimiter character
    SET @Delim = SUBSTRING(@ConcatValues, 1, 1)
    --Append delimiter character
    Set @ConcatValues = @ConcatValues + ' ' + @Delim    
    --Set 1st character of 1st value
    Set @Pos2 = 2

    While @Pos2 < Len(@ConcatValues)
    BEGIN
        Set @Pos1 = CharIndex(@Delim, @ConcatValues, @Pos2)
        Insert @Values SELECT LTRIM(RTRIM(Substring(@ConcatValues, @Pos2, @Pos1 - @Pos2)))
        --Go to next non-delimiter character
        Set @Pos2 = @Pos1 + 1
    END
    RETURN
END


GO

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

1 голос
/ 07 апреля 2011

А как насчет строки идентификаторов, разделенных запятыми?

Проблема в том, что сервер sql не поддерживает тип данных массива (или аналогичный)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...