2013-12-05 4 views
0

Я писал сценарий SQL и вдруг запуталась в следующей строке:SQL Локальные переменные

IF EXISTS(SELECT @IDTTIC = IDTTIC TOP 1 * FROM @ProblemTickets) 

где @ProblemTickets это мой табличную переменную.

ли вышеуказанное условие хорошо написано или оно должно быть так:

IF EXISTS(SELECT TOP 1 @IDTTIC = IDTTIC FROM @ProbelmTickets) 
+2

Это должно быть легко проверить, не так ли? – Twinkles

+0

Не является также и юридическим синтаксисом. Чего вы пытаетесь достичь? – GarethD

+0

Почему вы используете TOP без ORDER BY? –

ответ

2
IF EXISTS(SELECT * FROM @ProblemTickets) 
    BEGIN 
    SELECT TOP 1 @IDTTIC = IDTTIC FROM @ProblemTickets 
    END 

Exists чек Clause для exisitance чего-то, если он существует, то он возвращает истину, и если оно не получится return false, но вы не можете возвращать данные внутри предложения Exists.

Вы можете попробовать, как я показал выше

1- Проверьте существования чего-то 1.

2- Если он существует, получите первое значение в переменной.

* Предложение Аароном Bertrand *

Вы можете просто присвоить значение переменной без проверки на существование 1, если есть какие-либо данные в таблице значение будет присвоено переменной в противном случае переменная остается NULL.

При присвоении значения переменной в инструкции SELECT убедитесь, что ваш SELECT возвращает только одну строку назад, если, очевидно, вы уже выполняете SELECT TOP 1, но чтобы получить строку «Right TOP 1», вы должны использовать предложение ORDER BY также. Кроме того, при присвоении значений переменной в SELECT, вы не можете получить данные в то же время, если SELECT, возвращает более одного столбца все значения перестраиваемых должны храниться в переменной

Что-то вроде этого ..

SELECT TOP 1 @Var1 = Col1, @Var2 = Col2, @Var3 = Col3 
FROM TABLE_Name 
ORDER BY Some_Column 

вы не можете сделать что-то вроде этого

SELECT TOP 1 @Var1 = Col1, @Var2 = Col2, Col3 
FROM TABLE_Name 
ORDER BY Some_Column 
+0

Большое спасибо Muhammed ... –

+0

Почему вы вводите EXISTS здесь? Если строк нет, назначение приведет к тому, что переменная будет NULL, так же, как если бы вы только назначили переменную, если EXISTS истинна. Кажется, что это дополнительный код для цели. –

+0

@AaronBertrand вы проходите все мои ответы?:) OP пытался проверить наличие и одновременно присвоить значение переменной, я просто разделил ее на два утверждения. предполагая, что это всего лишь фрагмент его кода, и фактический код будет иметь намного больше ifs и еще. –

0

Лично я думаю, что это должно быть просто:

SELECT TOP (1) @IDTTIC = IDTTIC FROM @ProblemTickets ORDER BY <something>; 

Если в таблице есть какие-либо строки, значение будет заполнено (если только этот столбец не может быть NULL, конечно). Если строк нет, переменная все равно будет NULL.

Не нужно указывать IF EXISTS и , затем присваивать переменную другому SELECT. Вы просто читаете таблицу дважды, а не один раз, без уважительной причины.

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