Domanda

Vorrei creare una procedura memorizzata con parametri che indicano quali campi devono essere selezionati.

es. Vorrei passare due parametri "selectField1" e " selectField2 " ognuno come bool.

Quindi voglio qualcosa come

SELECT

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

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

FROM Table

Grazie Karl

È stato utile?

Soluzione

Sembra che vogliano restituire solo i campi consentiti, il che significa che anche il numero di campi restituiti deve essere dinamico. Funzionerà con 2 variabili. Nulla di più di questo diventerà confuso.

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

Dynamic SQL aiuterà con i multipli. Questo esempio presuppone che la colonna almeno 1 sia vera.

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)

Altri suggerimenti

In SQL , lo fai in questo modo:

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

Il modello relazionale non implica il conteggio dinamico dei campi.

Invece, se non sei interessato a un valore di campo, devi solo selezionare un NULL e analizzarlo sul client.

Desideri l'istruzione CASE :

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

EDIT: il mio esempio è di combinare i due campi in un campo, a seconda dei parametri forniti. È una soluzione uno o nessuno dei due (non entrambi). Se vuoi la possibilità di avere entrambi i campi nell'output, usa la soluzione di Quassnoi.

@selectField1 AS bit
@selectField2 AS bit

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

È questo quello che stai cercando?

Questo è uno pseudo modo di farlo

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

quello che vuoi è:

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

nella selezione

Tuttavia, non semplicemente non mostri quella colonna nel tuo programma?

Il modo noob per farlo:

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

Puoi gestire queste informazioni correttamente nel linguaggio di programmazione solo facendo un if-else.

Esempio in ASP / JavaScript

// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
   do_the_stuff_a();
}
if (rs("field2")) {
   do_the_stuff_b();
}
rs.MoveNext();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top