2012-11-29 3 views
0

내가 가진 이름 테이블 :SQL 쿼리가 - C#

ID   Name 
1   Ken 
2   John 
3   Tom 

...

나는 C# 코드에서 변수를 다음 있습니다 : var names; // "ken, Tom"과 같은 이름의 목록입니다.

이름 테이블을 통과하는 쿼리가 필요하며 이름에없는 모든 이름이 가변적입니다.

그래서 위의 경우 쿼리 결과를 실행하면 John이어야합니다.

나는이 문제에 대한 쿼리를 작성하는 방법을 잘 모르겠다. 이름을 반복하여 쿼리를 반복해서 실행하고 있는데, 실제로이 방법을 사용하는 것이 좋지 않다고 생각한다. 누군가가이 일을하는 가장 효율적인 방법을 제안 할 수 있습니까? 인라인 또는 저장 프로 시저에서 수행 할 수

SELECT * 
FROM table 
WHERE Name NOT IN (<<comma separated list of values here>>) 

: 당신이 T-SQL에서 그것을 할 필요가있는 경우

+0

SQL "IN"문을 보았습니까? 그것은 최선의 선택처럼 보이지만 귀하의 적법한 계획을 따르고 names 변수에 SQL 주입에 사용할 수있는 것이 아무것도 포함되어 있지 않은지 확인해야합니다. (하나의 간단한 테스트 방법은 "O'Reilley"라는 이름을 포함시키는 것입니다). 추가 정보 : http : //msdn.microsoft.com/en-us/library/ms177682.aspx 및 https://www.owasp.org/index.php/SQL_Injection – David

+0

Lync를 사용하고 있습니까? 코드를 게시하십시오. – SergeyS

+0

@DavidStratton - 여기서 "in"을 어떻게 사용할 수 있습니까? 이름에서 선택 * 이름 ">"Ken " – NoviceMe

답변

0

table-valued parameter를 사용해보십시오하여 보내 :

당신이 엔티티 프레임 워크를 사용할 수있는 경우 (당신은 닷넷 4.0 표시, 그래서 당신은 할 수 있어야)는, 당신은이 대답에 비슷한 사용할 수 있습니다 그 시점에서, 당신은 정상적으로 비교할 수 있습니다.

0

표가 나와있는 것처럼 간단하면 2 천 개가 넘는 레코드가 있다고 상상할 수 없습니다. 그렇다면 테이블 스캔은 수용 가능한 솔루션이어야합니다.

select Name 
    from tbl 
where ', ' + @names + ', ' not like '%, ' + name + ', %'; 

@names 변수를 매개 변수화하십시오.