2012-06-28 7 views
1

SQL에서 매개 변수를 사용하여 작업 할 "위치"를 얻으려고합니다. SQL where 사용 매개 변수

SELECT * FROM tablename WHERE(name IN (@names)) 

그래서 나는 sqlmanager에서 SQL을 실행하고 나는 그것을 요청받을 때, @name 값에 '이름 1', 'NAME2'를 입력. 이렇게하면 쿼리가 0 행을 반환합니다. 하지만 내가 SQL을 변경하면 :

SELECT * FROM tablename WHERE(name IN ('Name1','Name2')) 

그것은 작동합니다.

작동시키기위한 트릭이란 무엇입니까?

이 포스팅은 나를 위해 그것을 해결 : 모든 응답에 대한 Link to post 감사합니다 :)

+2

빠른 퀴즈 - 이름 단일를 전달하면, * 모든 * 프로그래밍 언어를 매개 변수를 사용하면 해당 매개 변수의 내부를 검사하고 쉼표를 찾아서 쉼표로 분리 한 다음 여러 매개 변수가 제공된 것처럼 모든 것을 처리합니다. –

답변

0

이 시도하십시오 ..

Declare @names varchar(150) 
Set @names = '''Name1'',''Name2''' 
Declare @str varchar(max) 
set @str = 'SELECT * FROM tablename WHERE(name IN ('[email protected]+'))' 
Execute(@str) 
+0

이름 목록에 [Bobby Tables] (http://xkcd.com/327/)가 포함되어 있으면 SQL 인젝션에 취약합니다. –

+0

@names는 Sql 저장 프로 시저의 Parameter이므로 Sql Injection을 사용할 수 없습니다. –

+1

'@ names'가 매개 변수이기 때문에 문자열 연결을 통해 매개 변수화되지 않은 동적 SQL 쿼리를 생성하고 실행하면 SQL 주입으로부터 당신을 보호하지 못합니다. –