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 중국어 웹사이트의 기타 관련 기사를 참조하세요!