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
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();