WHERE … IN @xs
절을 사용하여 매개 변수가있는 ADO.NET 쿼리를 만들려고합니다. 여기서 @xs
은 가능한 한 연속되지 않는 값의 짧은 목록입니다 (예 : (2, 3, 5, 8, 13)
). 이 작업을 수행 할 수 있습니까? 그렇다면 어떻게?WHERE ... IN @ xs`에서 @xs 매개 변수는 값 목록입니다. ADO.NET에서 지원됩니까?
이 작동하지 않습니다
int[] xs = { 2, 3, 5, 8, 13 }; // I've also tried using a List<int> instead
var c = new System.Data.SqlClient.SqlCommand();
c.CommandText = "SELECT … FROM … WHERE … IN @xs";
c.Parameters.AddWithValue("@xs", xs); // throws ArgumentException due to `values`
는 어느 쪽도 아니 System.Data.SqlDbType
enum이나 System.Data.SqlTypes
namespace의 유형이 시나리오가 지원됩니다 것을 제안합니다. 동적 SQL (문자열 연산을 사용하여 최종 SQL CommandText
을 수동으로 작성)으로 되돌려 야합니까?
올바르게 이해한다면, ** SQL Server 데이터베이스에서 사용자 정의 테이블 유형을 생성해야합니다. ('CREATE TYPE xsType AS TABLE (x INT)'), ** 2. ** 설정 매개 변수의 SqlDbType을 SqlDbType.Structured로, TypeName을 xsType으로, ** 3. ** 하나의 열로 구성된 테이블을 @xs로 만듭니다 (예 : IEnumerable 형태로). ** ** IN IN xs를'IN (SELECT x FROM @xs)'로 바꾼다. 올바른가? –
stakx
@stakx - 1. 그렇다. 2. 항상 TypeName을 설정할 필요는 없다. (msdn 링크) 3. 예, 또는 (IMO)가 더 간단한 DataTable을 사용할 수 있습니다 4. 예 : http://msdn.microsoft.com/en-us/library/bb675163.aspx –