2013-08-29 4 views
0

현재 하나의 값을 가진 SQL 매개 변수를 전달 중입니다.여러 값을 갖는 SQL 매개 변수

그래서 지금 내가 가진 :

SqlParameter sqlParameter = new SqlParameter("@Parameter", SqlDbType.VarChar); 
sqlParameter.Value = ParameterValue 

이 내 SQL 쿼리 내 WHERE 절에서 잘 작동한다.

그러나 지금은 WHERE에 여러 값이 전달되도록 옵션을 남기고 싶습니다.

일반 문자열을 전달하는 대신 쉼표로 문자열을 전달하여 값을 구분할 생각이었습니다.

그래서 SqlParameter.Value = "value1, value2, value3";

와 나는 실제로 내 SQL 쿼리를 수정 해달라고 경우이 작업을 수행 할 수있는 간단한 방법이 있을까요는

WHERE Parameter = value1 OR Parameter = value2 OR Parameter = value3

처럼 행동하고 싶어?

+2

아니요, 할 수 없습니다. – Rik

+1

짧은 대답 : 아니오 - 문자열을 전달하고 'where in Parameter in (v1, v2)'쿼리를 사용하지 않는 한 여러 개의 매개 변수를 전달하려고합니다. 그러나 SQL injection까지 열립니다. – BrokenGlass

+0

[ SQL IN 절?] (http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause?lq=1) –

답변

0

쿼리가 "where parameter = @paramter"인 경우에는 그렇지 않습니다.

어느 쿼리를 변경하려면 "여기서 매개 변수에 ..."

또는 것은 다른 테이블/테이블 변수로 값을 얻고 그들과 합류.

0

값을 확인하기 위해 쉼표로 구분 된 목록을 전달하려는 경우 목록을 가져 와서 분할하여 임시 테이블이나 테이블 변수에 삽입 한 다음 과 같은 모든 일반 테이블 문을 수행 할 수 있습니다. JOIN, IN, EXISTS로 존재합니다.

다음은 쉼표로 구분 된 문자열을 가져 와서 테이블로 바꾸는 좋은 방법입니다. http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

1

결론 : 당신이하려는 것을 지원하기 위해 SQL 문이나 저장 프로 시저 중 하나를 변경해야합니다.

당신이 성취하려는 일을 수행하는 데는 여러 가지 방법이 있지만 내 생각에는 이상적인 방법이 없습니다. Erland Sommarskog는 배열과 목록을 SQL Server (http://www.sommarskog.se/arrays-in-sql-2005.html)에 전달하는 여러 가지 방법을 설명하는 훌륭한 기사를 썼습니다. SQL Server 2008 이상을 사용하는 경우 깨끗한 방법으로 테이블 값 매개 변수 (http://www.sommarskog.se/arrays-in-sql-2008.html)를 사용하고 있습니다. 이 방법을 사용하면 기본적으로 SQL Server에 값 배열을 전달합니다.

테이블 값 매개 변수 접근법을 사용하면 매개 변수는 값을 선택할 수있는 테이블처럼 작동합니다. 그래서, 예를 들어, 당신은 다음처럼 저장 프로 시저 (또는 SQL 문)을 수정할 수 있습니다에 How to pass table value parameters to stored procedure from .net code

더 많은 정보를 원하시면 여기이 방법에 대한 자세한 내용을 제공하는 다른 SO 질문/대답이

CREATE PROCEDURE get_products @Parameter myCustomParameterType READONLY AS 
SELECT p.ProductID, p.ProductName 
FROM Products p 
WHERE p.ProductID IN (SELECT n FROM @Parameter) 

테이블 가치 매개 변수는 여기에서 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/bb675163.aspx