Je voudrais créer une procédure stockée avec des paramètres qui indiquent quels champs doivent être sélectionnés.
Par exemple. Je voudrais passer deux paramètres "selectField1" et "selectField2" chacun comme bools.
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
On dirait qu'ils veulent pouvoir renvoyer uniquement les champs autorisés, ce qui signifie que le nombre de champs retournés doit également être dynamique. Cela fonctionnera avec 2 variables. Rien 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
Dynamic SQL vous aidera avec les multiples. Cet exemple suppose que la colonne au moins 1 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)
Dans SQL
, vous 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 comptage de champ dynamique.
Au lieu de cela, si vous n'êtes pas intéressé par une valeur de champ, il vous suffit de sélectionner un NULL
à la place et de l'analyser sur le client.
Vous voulez l'instruction CASE
:
SELECT
CASE
WHEN @SelectField1 = 1 THEN Field1
WHEN @SelectField2 = 1 THEN Field2
ELSE NULL
END AS NewField
FROM Table
EDIT: Mon exemple est de combiner les deux champs en un seul champ, en fonction des paramètres fournis. Il s'agit d'une solution un ou aucun (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
C'est 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 simplement cette colonne dans votre programme?