2017-09-12 1 views
0

내 상황에 맞는 솔루션을 찾기 위해 하루 종일 찾고 있습니다. 나는 매우 유사하지만 내 상황에서는 작동하지 않는 것들을 발견했다. 나는 그것을 시도했다.SQL에서 열 이름에 대한 매개 변수에 대한 case 문을 사용합니다.

다음은 시나리오입니다. 두 개의 테이블베이스와 파트 세부 사항이 있습니다. 데이터 표보기를 채우는 SQL 쿼리의 매개 변수를 선택하기 위해 목록을 드롭 다운 된 asp 웹 사이트 (내부 전용)가 있습니다.

내 문제는이 페이지의 드롭 다운 목록 상자를 기반으로 검색 할 수 있도록 입력 한 조건의 열 이름을 할당 할 수 있어야합니다. (이 하나가 0 행을 반환)

sqlCmd.CommandText = ("Select ba.referenceid, ba.partnum, pd.width, pd.length, CONVERT(varchar(12), pd.dateentered, 101) As [dateentered], ba.partqty, ba.status, ba.material From tbl_dlbase ba Join tbl_partdetails pd On ba.referenceid = pd.referenceid Where Case @field1 When 'part #' Then 'ba.partnum' When 'Spacing' Then 'pd.spacing' When 'Surface' Then 'pd.surface' When 'Height' Then 'pd.height' When 'Thickness' Then 'pd.thickness' End Like '%' + @criteria1 + '%'") 

sqlCmd.Parameters.AddWithValue("@field1", ddlSc1.SelectedItem.Text) 
sqlCmd.Parameters.AddWithValue("@criteria1", txbCriteria1.Text) 

이 내가 시도 SQL 문의 최신 버전입니다 : 여기

내가 정의하기 위해 노력하고있는 쿼리입니다. ASP 페이지에서 ddlsc1 드롭 다운 목록의 선택에 따라 필드/열 이름을 설정할 수 있어야합니다.

나는 Studio Manager에서 쿼리를 시도하여 무언가 손가락으로 핑거가 있는지 확인할 수도 있지만 0 행을 반환하므로 쿼리에 문제가 있음을 알 수 있습니다.

어떻게 이름에 대한 매개 변수를 사용하여 열 이름 필드를 설정할 수 있습니까? 나는 이것이 SQL 주입에 대한 거대한 안보 문제라고 알고 있지만 이것은 내부 전용 사이트이며, 더 중요하게는 상사가 변수로 처리하기를 원한다고 말했다.

+0

나는 변수 이름을 사용한다고 생각하여 동적이라고 생각했습니다. 동적 SQL은 정확히 무엇입니까? – mbcharney

+2

당신은 당신이 필요로하는 것을 알지 못한다고 생각합니다. – Codexer

+0

"* 나는 하루 종일 내 상황에 맞는 해결책을 찾고 있었는데, 매우 유사하지만 상황에 맞지 않는 몇 가지 것을 발견했다. 시도했다. * 음, 이것이 사실이라면 당신이 이미 동적 SQL이 무엇인지 알았던 것처럼 보인다. (이것은 인터넷상의 매우 일반적인 요청이다.) 이미 "내 상황에는 효과가 없다"고 시도한 것을 보여주십시오. – RBarryYoung

답변

2

THEN 값 주위에 작은 따옴표가있는 것이 아닌 다른 문제가 발생하지 않습니다. 이 문제가 해결 되었습니까?

SELECT ba.referenceid 
    ,ba.partnum 
    ,pd.width 
    ,pd.length 
    ,CONVERT(VARCHAR(12), pd.dateentered, 101) AS [dateentered] 
    ,ba.partqty 
    ,ba.STATUS 
    ,ba.material 
FROM tbl_dlbase ba 
JOIN tbl_partdetails pd ON ba.referenceid = pd.referenceid 
WHERE CASE @field1 
     WHEN 'part #' 
      THEN ba.partnum 
     WHEN 'Spacing' 
      THEN pd.spacing 
     WHEN 'Surface' 
      THEN pd.surface 
     WHEN 'Height' 
      THEN pd.height 
     WHEN 'Thickness' 
      THEN pd.thickness 
     END LIKE '%' + @criteria1 + '%' 
관련 문제