2016-05-17 4 views
1

Я хочу иметь выбор, который не будет иметь фиксированного количества столбцов. Колонка OptionalColumn должны быть выбраны, только если переменная @check = 1Выберите определенный столбец, только если выполнено условие

Это то, что я имел (синтаксис плохо, но может быть, это объясняет, моя проблема)

SELECT 
    Column1, Column2, 
    (IF @Check = 1 
     BEGIN OptionalColumn END) 
FROM table 

Очень важно иметь это только если @Check = 1 и не иметь его, если @Check = 0. Это выполнимо?

+3

Если вы действительно хотите исключить этот столбец (не только значение «NULL»), вы должны использовать хранимую процедуру или функцию с таблицей и «IF ... ELSE». –

+1

Прошу прощения, но это ужасный дизайн. Если вы уверены, что это то, что вам нужно, решите его по-другому; имеют логику для определения того, что значение @ check1 есть, и на основе этого результата извлекают данные из 2 представлений; 1 с столбцом и 1 без столбца, и чтобы ваш front-end отображал или скрывал столбец таким образом. – SchmitzIT

+0

SQL-запрос возвращает заданный набор столбцов. Для «SELECT» нет такой концепции, как «необязательные столбцы». Как говорит @TimSchmelter, вам нужно использовать динамический SQL или отдельные инструкции 'IF'. –

ответ

2

Вы можете сделать это с блоком IF ELSE, подобным этому;

CREATE TABLE #table (Column1 varchar(10), Column2 varchar(10)) 
INSERT INTO #table 
VALUES 
('column1', 'column2') 

DECLARE @Check bit; SET @Check = 0 

IF @Check = 1 
(SELECT Column1, Column2 
FROM #table) 

ELSE 

(SELECT Column1 
FROM #table) 

Измените переменную от 0 до 1 для тестирования, чтобы увидеть изменение количества столбцов.

2

Rich Беннер дал вам хорошее решение, в качестве альтернативы вы можете использовать динамический SQL так:

DECLARE @sqlvar VARCHAR(100) 
select @Sqlvar= ' SELECT Collumn1, Collumn2 '+IIF (@check=1,',OptionalCollumn','')+' from TABLE'; 
EXECUTE sp_executesql @sqlvar 

Для справки на sp_ взгляд ExecuteSQL: [https://msdn.microsoft.com/it-it/library/ms188001(v=sql.120).aspx]

+0

Динамический SQL немного выше по шкале сложности, и для этой ситуации может быть чересчур избыток. Сказав это, по-прежнему очень полезно учиться. – Ellesedil

1

Можно использовать IF ELSE блок. Пожалуйста, попробуйте это.

--Creating a Table. 
CREATE TABLE #MyTable 
    (
    Column1 VARCHAR(10), 
    Column2 VARCHAR(10), 
    OptionalColumn VARCHAR(10) 
    ) 
--Inserting value to the Table. 
INSERT INTO #MyTable 
VALUES('Value 1', 'Value 1','Optional Value') 

--IF ELSE Logic to desired output. 
DECLARE @Check bit 
SET @Check = 0 

IF @Check = 1 
    (
    SELECT 
     Column1, 
     Column2 
    FROM 
     #MyTable 
    ) 
ELSE 
    (
    SELECT 
     Column1, 
     Column2, 
     OptionalColumn 
    FROM 
     #MyTable 
    ) 
Смежные вопросы