SQL condicional SELECIONAR
-
10-07-2019 - |
Pergunta
Eu gostaria de criar um procedimento armazenado com parâmetros que indicam quais campos devem ser selecionado.
por exemplo. Eu gostaria de passar dois parâmetros "selectField1" e "selectField2" cada um como bools.
Então eu quero algo como
SELECT
if (selectField1 = true) Field1 ELSE do not select Field1
if (selectField2 = true) Field2 ELSE do not select Field2
FROM Table
Graças Karl
Solução
Parece que eles querem que a capacidade de retornar campos só é permitido, o que significa que o número de campos retornados também tem que ser dinâmico. Isto irá funcionar com 2 variáveis. mais nada do que isso estará recebendo 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
SQL dinâmico vai ajudar com múltiplos. Este exemplo está a assumir pelo menos uma coluna é verdadeiro.
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)
Outras dicas
Em SQL
, você fazê-lo desta maneira:
SELECT CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM Table
O modelo relacional não implica contagem campo dinâmico.
Em vez disso, se você não está interessado em um valor de campo, basta selecionar um NULL
vez e analisá-lo no cliente.
Você quer que a CASE
declaração :
SELECT
CASE
WHEN @SelectField1 = 1 THEN Field1
WHEN @SelectField2 = 1 THEN Field2
ELSE NULL
END AS NewField
FROM Table
EDIT: Meu exemplo é para combinar os dois campos em um campo, dependendo dos parâmetros fornecidos. É um um-ou-não solução (não ambos). Se você quiser a possibilidade de ter ambos os campos na saída, solução de uso do Quassnoi.
@selectField1 AS bit
@selectField2 AS bit
SELECT
CASE
WHEN @selectField1 THEN Field1
WHEN @selectField2 THEN Field2
ELSE someDefaultField
END
FROM Table
É isso que você está procurando?
Esta é uma maneira pseudo de fazê-lo
IF (selectField1 = true)
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table
o que você quer é:
MY_FIELD=
case
when (selectField1 = 1) then Field1
else Field2
end,
no seleto
No entanto, y que você não apenas não mostrar essa coluna em seu programa?
A forma do noob para fazer isso:
SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE
Você pode gerenciar essas informações corretamente na linguagem de programação única a fazer um if-else.
Exemplo em ASP / JavaScript
// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
do_the_stuff_a();
}
if (rs("field2")) {
do_the_stuff_b();
}
rs.MoveNext();