Question

Je souhaite créer une procédure stockée avec des paramètres indiquant les champs à sélectionner.

E.g. Je souhaite transmettre deux paramètres "selectField1". et " selectField2 " chacun comme bool.

Ensuite, je veux quelque chose comme

SELECT

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

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

FROM Table

Merci Karl

Était-ce utile?

La solution

On dirait qu'ils veulent pouvoir uniquement renvoyer des champs autorisés, ce qui signifie que le nombre de champs retournés doit également être dynamique. Cela fonctionnera avec 2 variables. Quelque chose de plus que cela deviendra déroutant.

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

Le SQL dynamique aidera avec les multiples. Cet exemple suppose qu'au moins une colonne est vraie.

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)

Autres conseils

Dans SQL , procédez comme suit:

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

Le modèle relationnel n'implique pas un nombre de champs dynamique.

Au lieu de cela, si une valeur de champ ne vous intéresse pas, il vous suffit de sélectionner NULL et de l'analyser sur le client.

Vous souhaitez que la déclaration CASE :

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

EDIT: Mon exemple concerne la combinaison des deux champs en un seul, en fonction des paramètres fournis. Il s’agit d’une solution un ou un (pas les deux). Si vous voulez avoir la possibilité d’avoir les deux champs dans la sortie, utilisez la solution de Quassnoi.

@selectField1 AS bit
@selectField2 AS bit

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

Est-ce ce que vous cherchez?

C’est une pseudo façon de le faire

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

ce que vous voulez, c'est:

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

dans la sélection

Cependant, vous ne montrez pas cette colonne dans votre programme?

La façon noob de faire cela:

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

Vous pouvez gérer ces informations correctement dans le langage de programmation en effectuant une opération if-else.

Exemple en ASP / JavaScript

// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
   do_the_stuff_a();
}
if (rs("field2")) {
   do_the_stuff_b();
}
rs.MoveNext();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top