2010-09-30 3 views
2

Я пишу хранимую процедуру, и в рамках этой процедуры я использую isNULL. Если значение равно null, я хочу использовать оператор select в качестве значения замены, что даже возможно?Выбрать оператор в ISNULL

IF ISNULL(@v_FilePrefix, (SELECT @v_FilePrefix = TransactionTypePrefix 
          FROM [ConfigTransactionType] 
          WHERE TransactionTypeID = @TransactionTypeID)); 
+1

нет, его не представляется возможным. где @v_FilePrefix исходит из вышеприведенного кода? вы должны улучшить логику, чтобы удовлетворить нулевое значение в исходном запросе. – RPM1984

+0

Я пошел с вашим подходом, и он работал точно так, как предполагалось. Это то, что я использовал. – Tempname

+0

Тогда вы должны [принять его ответ] (http://meta.stackexchange.com/questions/16721/what-is-an-accept-rate-and-how-does-it-work). – NullUserException

ответ

1

Вы можете использовать это:

IF @v_FilePrefix IS NULL 
BEGIN 

    SELECT @v_FilePrefix = TransactionTypePrefix 
    FROM [ConfigTransactionType] 
    WHERE TransactionTypeID = @TransactionTypeID 

END 

Я думаю, что это то, что вы после этого?

+2

AFAIK 'NULL! = NULL' – NullUserException

+0

@NullUserException, извините, вы правы. 'IS NULL' - это то, что вы хотите ... –

1

Предполагая @TransactionTypeID всегда будет возвращать значение:

SELECT @v_FilePrefix = COALESCE(@v_FilePrefix, TransactionTypePrefix) 
    FROM [ConfigTransactionType] 
WHERE TransactionTypeID = @TransactionTypeID 

COALESCE возвратит первый ненулевое значение. Если @v_FilePrefix не является нулевым, он просто установит значение для себя.

Но было бы лучше использовать:

IF @v_FilePrefix IS NULL 
BEGIN 

    SELECT @v_FilePrefix = TransactionTypePrefix 
    FROM [ConfigTransactionType] 
    WHERE TransactionTypeID = @TransactionTypeID 

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