>백엔드 개발 >C++ >C# 문자열 목록을 SQL Server 저장 프로시저의 IN 절에 전달하는 방법은 무엇입니까?

C# 문자열 목록을 SQL Server 저장 프로시저의 IN 절에 전달하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-04 15:55:39471검색

How to Pass a C# String List to an SQL Server Stored Procedure's IN Clause?

C#에서 SQL Server 저장 프로시저로 목록 전달

지정된 C# 코드에서 저장 프로시저는 다양한 매개 변수 값을 사용하여 호출됩니다. 문자열 목록을 포함합니다. 그러나 저장 프로시저 내의 쿼리에서는 목록이 IN 절의 일부로 전달되어야 합니다.

해결책: 사용자 정의 테이블 유형 사용(SQL Server 2008)

SQL Server 2008에는 데이터 컬렉션을 구조화된 방식으로 저장 프로시저에 전달할 수 있는 기능인 사용자 정의 테이블 유형이 도입되었습니다. 이 솔루션을 구현하는 방법은 다음과 같습니다.

1. 사용자 정의 테이블 유형 생성

문자열 목록에 해당하는 테이블 유형을 생성합니다. 예를 들면 다음과 같습니다.

CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);

2. 저장 프로시저 수정

테이블 유형을 입력 매개변수로 허용하도록 저장 프로시저를 조정합니다.

CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Query using the table type
    SELECT l.Item FROM @list l;
END

3. C#에서 테이블 유형 채우기

C#에서 DataTable 개체를 만들고 문자열 목록으로 채웁니다. 그런 다음 DataTable을 저장 프로시저에 전달하는 매개변수를 정의합니다.

using (var table = new DataTable())
{
    table.Columns.Add("Item", typeof(string));

    for (int i = 0; i < 10; i++)
        table.Rows.Add("Item " + i.ToString());

    var pList = new SqlParameter("@list", SqlDbType.Structured);
    pList.TypeName = "dbo.StringList";
    pList.Value = table;

    cmd.Parameters.Add(pList);
}

4. 저장 프로시저 실행

채워진 SqlParameter 개체를 사용하여 저장 프로시저를 실행합니다.

사용 예:

using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}

위 내용은 C# 문자열 목록을 SQL Server 저장 프로시저의 IN 절에 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.