Frage

Ich möchte eine gespeicherte Prozedur mit Parametern erstellen, die angeben, welche Felder ausgewählt werden sollte.

z. Ich möchte zwei Parameter „selectField1“ passieren und „selectField2“ jeweils als bools.

Dann möchte ich so etwas wie

SELECT

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

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

FROM Table

Danke Karl

War es hilfreich?

Lösung

Klingt wie sie die Fähigkeit zurückkehren dürfen nur Felder wollen, die die Anzahl der Felder bedeutet zurückgegeben hat auch dynamisch sein. Dies wird mit zwei Variablen arbeiten. Alles, was mehr als das wird immer verwirrend.

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

Dynamische SQL wird mit Multiples helfen. Dieses Beispiel wird unter der Annahme, atleast 1-Säule ist wahr.

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)

Andere Tipps

In SQL, tun Sie es so aus:

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

Relationale Modell impliziert nicht, dynamisches Feld zu zählen.

Stattdessen, wenn Sie nicht daran interessiert, in einem Feld Wert sind, wählen Sie nur einen NULL statt und analysieren es auf dem Client.

Sie möchten die CASE Anweisung :

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

EDIT: Mein Beispiel ist die zwei Felder in ein Feld zum Kombinieren, in Abhängigkeit von den Parametern versorgt. Es ist eine ein-oder-weder Lösung (nicht beides). Wenn Sie die Möglichkeit, die beiden Felder in der Ausgabe möchten, verwenden Sie Quassnoi Lösung.

@selectField1 AS bit
@selectField2 AS bit

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

Ist das, was Sie suchen?

Dies ist eine Pseudo-Art und Weise, es zu tun

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

, was Sie wollen, ist:

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

in der Auswahl

Allerdings y Sie nicht nur nicht, dass die Spalte in Ihrem Programm zeigen?

Der Noob Weg, dies zu tun:

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

Sie können diese Informationen richtig in die Programmiersprache verwalten nur eine if-else zu tun.

Beispiel 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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top