문제

나는 것 같은 저장 프로시저를 만드는 매개변수를 나타내는 필드를 선택해야 합니다.

E.g.고 싶을 통과하는 두 개의 매개변수를"selectField1"및"selectField2"서로 bools.

그때 나는 뭔가

SELECT

if (selectField1 = true) Field1 ELSE do not select Field1

if (selectField2 = true) Field2 ELSE  do not select Field2

FROM Table

감사 Karl

도움이 되었습니까?

해결책

허용 된 필드 만 반환 할 수있는 능력을 원하는 것처럼 들리므로 반품 된 필드 수도 역동적이어야합니다. 이것은 2 개의 변수에서 작동합니다. 그 이상은 혼란스러워 질 것입니다.

IF (selectField1 = true AND selectField2 = true)
BEGIN
   SELECT Field1, Field2
   FROM Table
END
ELSE IF (selectField1 = true)
BEGIN
   SELECT Field1
   FROM Table
END
ELSE IF (selectField2 = true)
BEGIN
   SELECT Field2
   FROM Table
END

동적 SQL은 배수에 도움이됩니다. 이 예제는 1 열이 사실이라고 가정합니다.

DECLARE @sql varchar(MAX)
SET @sql = 'SELECT '
IF (selectField1 = true)
BEGIN
   SET @sql = @sql + 'Field1, '
END
IF (selectField2 = true)
BEGIN
   SET @sql = @sql + 'Field2, '
END
...
-- DROP ', '
@sql = SUBSTRING(@sql, 1, LEN(@sql)-2)

SET @sql = @sql + ' FROM Table'

EXEC(@sql)

다른 팁

~ 안에 SQL, 당신은 이렇게합니다 :

SELECT  CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
        CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM    Table

관계형 모델은 동적 필드 수를 의미하지 않습니다.

대신, 필드 값에 관심이 없다면 NULL 대신 고객에게 구문 분석하십시오.

당신은 원합니다 CASE 성명:

SELECT
  CASE 
    WHEN @SelectField1 = 1 THEN Field1
    WHEN @SelectField2 = 1 THEN Field2
    ELSE NULL
  END AS NewField
FROM Table

편집 : 내 예제는 제공된 매개 변수에 따라 두 필드를 하나의 필드로 결합하는 것입니다. 이것은 하나 또는 나이 해결책 (둘 다 아님). 출력에 두 필드를 모두 가질 가능성을 원한다면 Quassnoi의 솔루션을 사용하십시오.

@selectField1 AS bit
@selectField2 AS bit

SELECT
CASE 
    WHEN @selectField1 THEN Field1
    WHEN @selectField2 THEN Field2
    ELSE someDefaultField
END
FROM Table

이것이 당신이 찾고있는 것입니까?

이것은 Psuedo 방식입니다

IF (selectField1 = true) 
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table

당신이 원하는 것은 :

    MY_FIELD=
        case 
            when (selectField1 = 1) then Field1
                                 else Field2        
        end,

선택에서

그러나, 당신은 당신의 프로그램에 그 열을 보여주지 않습니까?

의 멍청한 방법으로 이렇게하려면:

SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE

이 정보를 관리할 수 있습에서 제대로 프로그래밍 언어만 하는 경우-다른 사람.

예제에서 ASP/JavaScript

// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
   do_the_stuff_a();
}
if (rs("field2")) {
   do_the_stuff_b();
}
rs.MoveNext();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top