Проверка столбца в операторе Select - PullRequest
0 голосов
/ 26 мая 2018

Можно ли проверить столбец перед его выделением в операторе выбора?

Мне может быть сложно объяснить, мне действительно пришлось учить себя динамическому SQL за последние 4 месяца.Я использую динамически генерируемый параметр (@TableName) для хранения отдельных таблиц в цикле (извиняюсь за неопределенность, но детали не имеют значения).

Затем я хочу иметь возможность условно выбирать столбец из таблицы (я не буду знать, имеет ли каждая таблица определенные столбцы).Я выяснил, как проверить столбец вне оператора select ...

SET @SQLQuery2 = 'Select @OPFolderIDColumnCheck = Column_Name From INFORMATION_SCHEMA.COLUMNS Where Table_Name = @TABLENAME And Column_Name = ''OP__FolderID'''
SET @ParameterDefinition2 = N'@TABLENAME VARCHAR(100), @OPFolderIDColumnCheck VARCHAR(100) OUTPUT'
EXECUTE SP_EXECUTESQL @SQLQuery2, @ParameterDefinition2, @TABLENAME, @OPFolderIDColumnCheck OUTPUT      

IF @OPFolderIDColumnCheck IS NULL
BEGIN           
    SET @OP__FOLDERID = NULL
END
ELSE
    IF @OPFolderIDColumnCheck IS NOT NULL
    BEGIN
        ...etc

, но id хотел бы иметь возможность сделать это внутри оператора select.Есть ли способ проверить и проверить, существует ли OP__FOLDERID в таблице?

Я хотел бы иметь возможность сделать что-то вроде этого:

SELECT IF 'OP__FOLDERID' EXISTS IN [TABLE] THEN 'OP__FOLDERID' FROM [TABLE]

Спасибо за любую помощь или направлениеВы можете предложить.

1 Ответ

0 голосов
/ 26 мая 2018

Боюсь, что нет прямого способа сделать это в операторе SELECT вообще.Однако вы можете определить, существует ли столбец в таблице, и соответственно построить свой динамический SQL.Чтобы сделать это, используйте что-то вроде этого:

IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULL
BEGIN
    -- Column Exists
END

Затем вы можете установить переменную в качестве флага, и код для построения динамического SQL будет конструировать выражение с / без столбца, по желанию.Другой подход состоит в том, чтобы использовать строковое значение и присвоить ему имя столбца, если оно присутствует (возможно, с префиксом или суффиксом запятой, в зависимости от выражения).Это позволит вам сохранять условные выражения записи в построении выражений и будет особенно полезно, если у вас есть более одного или двух из этих столбцов может быть в динамическом выражении.

...