TSQL: оператор if внутри выбранной вставки - PullRequest
4 голосов
/ 24 января 2012

У меня есть эта структура внутри функции:

INSERT INTO @TheTable
    SELECT DISTINCT

        @Number AS Number,

        @Name AS Name

    FROM MYTABLE 
    WHERE id = @id

Мне нужно добавить к этой структуре результат выполнения другой функции, и мне нужна ваша помощь для этого.

Ниже строки @Name AS Name, я должен добавить что-то вроде этого

IF (dbo.anotherFunction(@id)==1) 
@NewVisitor AS NewVisitor
ELSE
@NewVisitor AS NoNewVisitor

Как я могу перевести это на TSQL ??

Спасибо миллион!

Ответы [ 3 ]

7 голосов
/ 24 января 2012

Угадай, это то, что ты хочешь ...

INSERT INTO @TheTable
    SELECT DISTINCT
        @Number AS Number,
        @Name AS Name,
        case when (dbo.anotherFunction(@id)=1) then @NewVisitor else null end as NewVisitor,
        case when (dbo.anotherFunction(@id)<>1) then @NewVisitor else null end AS NoNewVisitor
    FROM MYTABLE 
    WHERE id = @id
1 голос
/ 24 января 2012

IF-операторы недоступны внутри операторов SELECT. Вместо этого вы захотите использовать CASE.

Документация MSDN на CASE

0 голосов
/ 24 января 2012

Этот вопрос не имеет никакого смысла для меня (почему все переменные, что означают столбцы?), Но вы можете сделать это следующим образом:

IF (dbo.anotherFunction(@id)==1) 
    INSERT INTO @TheTable
    SELECT DISTINCT
        @Number AS Number,
        @Name AS Name,
        @NewVisitor AS NewVisitor
    FROM MYTABLE 
    WHERE id = @id
ELSE
    INSERT INTO @TheTable
    SELECT DISTINCT
        @Number AS Number,
        @Name AS Name,
        @NewVisitor AS NoNewVisitor
    FROM MYTABLE 
    WHERE id = @id

В качестве альтернативы используйте два оператора CASE для выбранных NewVisitor и NoNewVisitor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...