Использование таблицы сразу после ее создания: объект не существует

У меня есть сценарий на T-SQL, который выглядит следующим образом:

create table TableName (...)
SET IDENTITY INSERT TableName ON

И во второй строке я получаю ошибку:

Не удается найти объект «TableName», потому что он не существует или у вас нет разрешений.

Я выполняю его из Management Studio 2005. Когда я помещаю «GO» между этими двумя строками, он работает. Но я бы хотел не использовать «GO», потому что я хотел бы поместить этот код в свое приложение, когда оно будет завершено.

Итак, мой вопрос в том, как заставить эту работу работать без использования «GO», чтобы я мог запускать ее программно из моего приложения C #.


person Tomasz Smykowski    schedule 24.04.2009    source источник


Ответы (5)


Без использования GO программно вам нужно будет сделать 2 отдельных вызова базы данных.

person Jose Basilio    schedule 24.04.2009

Запустите два сценария один за другим, используя два вызова из вашего приложения.

Вы должны запускать второй только после того, как первый будет успешно запущен в любом случае, чтобы вы могли запустить первый сценарий, а в случае успеха - второй. Таблица должна быть создана, прежде чем вы сможете ее использовать, поэтому вам нужен GO в Management Studio.

person Fenton    schedule 24.04.2009

Из BOL: «Утилиты SQL Server интерпретируют GO как сигнал о том, что они должны отправить текущий пакет операторов Transact-SQL в SQL Server». Следовательно, как уже указывал Хосе Базилио, вы должны делать отдельные вызовы базы данных. Если это может помочь, я столкнулся с той же проблемой, и мне пришлось написать небольшой (очень простой) синтаксический анализатор, чтобы разделить каждый сценарий на кучу мини-сценариев, которые отправляются - по одному - в базу данных.

person M.Turrini    schedule 24.04.2009

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

вот как вы делаете один

declare @TableName table (ColumnName int, ColumnName2 nvarchar(50))

затем вставить вы просто сделайте это

insert into @TableName (ColumnName, ColumnName2)
select 1, 'A'
person DForck42    schedule 24.04.2009

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

person tpdi    schedule 24.04.2009