2012-01-01 5 views
1

Ive искал StackOverFlow и не нашел.Проверьте, существует ли переменная таблицы?

Есть ли способ узнать, есть ли таблица Переменная уже существует?

что-то вроде:

IF OBJECT_ID('tempdb..#tbl') IS NOT NULL 
     DROP TABLE #tbl 

но для таблицы Var ...

+0

Вы спрашиваете о переменных таблицы или временных таблицах? Это разные вещи. – Oded

+2

Нужно ли это знать, учитывая, что переменные таблицы привязаны к пакету и выпадают из области действия после завершения партии? –

+0

@oded: переменные таблицы –

ответ

4

таблицы переменных, поскольку они являются переменными, отличны от временных или без временных таблиц, в которых они не указаны создано - их объявлено. В этом отношении они гораздо ближе к «нормальным» переменным, чем к таблицам.

Итак, есть смысл рассуждать о существовании переменной таблицы, как в разговоре о существовании любой переменной: если вы объявили вещь в своем исходном коде, она существует начиная с этой точки до конца ее области , который в SQL Server, как известно, является либо пакетом, либо хранимой процедурой/функцией, в которой он объявлен. И если вы еще не объявили переменную и пытаетесь ссылаться на нее в своем коде, ваш код просто не будет компилироваться , делая любое существование бесполезным, если вообще возможно.

Возможно, если вам кажется, что вам нужно сбросить и повторно создать (создать/объявить) переменную таблицы в вашем скрипте, то вам, вероятно, следует вместо этого использовать временную таблицу.

+0

перед тем, как я опустил таблицу, я должен проверить, существует ли она, в противном случае - i wil get exception ....... –

+0

@RoyiNamir: Да, конечно, я не спорил. Моя точка зрения заключалась в том, что переменные таблицы не подходят для удаления/воссоздания/проверки существования, но временные таблицы. Если вы хотите сбросить/воссоздать временную строку, установленную в вашем коде, используйте временную таблицу вместо переменной таблицы. –

+1

+1 Они создаются неявно, когда вводится область, содержащая объявление переменной таблицы. –

0

Я знаю, что это старая нить, но, надеюсь, это может помочь кому-то, кто приземляется здесь. При разработке из SSMS вы можете повторно запустить оператор, который выбирает переменную таблицы (например, select * into #tblvarFoo from dbName.schema.Foo). Но во второй раз, когда вы запустите его, вы получите сообщение об ошибке, которое оно уже существует. Итак, вы решили отказаться от него в первую очередь. Но тогда у вас есть проблема ОП была:

Перед тем, как удалить таблицу, я должен проверить, если он существует, в противном случае я буду получить исключение ...

У вас нет удалить переменную таблицы или проверить ее существование. Просто пересоедините (щелкните правой кнопкой мыши в окне запроса и выберите «Connection-> Change Connection ...») на тот же сервер/db, что и раньше.

1

Переменные таблицы @table немного отличаются от временных таблиц #table.
Таблица переменных @table необходимо объявить, пока временные таблицы #table должны создать.
В соответствии с определением объявления переменных существуют между их определенной областью (Begin и End). Поэтому нет необходимости отбрасывать переменные таблицы.

Но вы можете использовать оператор delete @table, если хотите удалить/удалить переменную таблицы.

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