var ColorEnum = {
red: {},
green: {},
blue: {}
}
Вам не нужно следить за тем, чтобы таким образом не назначать повторяющиеся числа различным значениям перечисления. Новый объект создается и присваивается всем значениям перечисления.
Похоже, они хотят иметь возможность возвращать только разрешенные поля, что означает, что количество возвращаемых полей также должно быть динамическим . Это будет работать с двумя переменными. Что-то большее, чем это, запутается.
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 поможет с кратными. В этом примере предполагается, что хотя бы 1 столбец является истинным.
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)
В SQL
это делается следующим образом:
SELECT CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM Table
Реляционная модель не предполагает динамического подсчета полей.
Вместо этого, если вас не интересует поле значение, вы просто выбираете NULL
и анализируете его на клиенте.
Вам нужен оператор CASE
:
SELECT
CASE
WHEN @SelectField1 = 1 THEN Field1
WHEN @SelectField2 = 1 THEN Field2
ELSE NULL
END AS NewField
FROM Table
РЕДАКТИРОВАТЬ: Мой пример предназначен для объединения двух полей в одно поле в зависимости от предоставленных параметров. Это решение "один или ни один" (но не оба). Если вы хотите, чтобы в выходных данных были оба поля, используйте решение Quassnoi.
Это псевдо-способ сделать это
IF (selectField1 = true)
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table
вам нужно:
MY_FIELD=
case
when (selectField1 = 1) then Field1
else Field2
end,
в списке выбора
Но разве вы просто не показываете этот столбец в своей программе?
@selectField1 AS bit
@selectField2 AS bit
SELECT
CASE
WHEN @selectField1 THEN Field1
WHEN @selectField2 THEN Field2
ELSE someDefaultField
END
FROM Table
Это то, что вы ищете?