2012-01-24 4 views
3

У меня есть эта структура внутри функции:TSQL: если заявление внутри отборной вставки

INSERT INTO @TheTable 
    SELECT DISTINCT 

     @Number AS Number, 

     @Name AS Name 

    FROM MYTABLE 
    WHERE id = @id 

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

Ниже @name AS Имя, линия Я хотел бы добавить что-то вроде этого

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

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

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

+0

Таким образом, ваш 'INSERT' не ссылается на какие-либо столбцы в' MYTABLE', и вы возвращаете столько строк, сколько есть совпадений 'id', а затем избавляетесь от всех, кроме одного с' DISTINCT'? Вам было бы намного лучше, просто используя 'IF EXISTS (...)' –

+1

являются newVisitor и noNewVisitor 2 разных столбца в @TheTable? Итак, вы хотите вставить @newVisitor в один из двух столбцов? – Beth

+0

Это просто пример, пожалуйста, научите меня, как сделать предложение if или подобное внутри этой структуры. Большое спасибо – user712027

ответ

6

Гадание это то, что вы хотите ...

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 
+0

Большое спасибо, вот что мне нужно! – user712027

1

IF заявление не доступно внутри ЗЕЬЕСТА. Вместо этого вы захотите использовать CASE.

MSDN Documentation on CASE

0

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

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.

Смежные вопросы