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

У меня есть script в T-SQL, который выглядит примерно так:

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Вы должны запускать только один раз, когда первый успешно выполнит все так, чтобы вы могли запустить первый script и при успешном запуске второго script. Стол должен быть создан, прежде чем вы сможете его использовать, поэтому вам нужна GO в студии управления.

Ответ 3

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

Ответ 4

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

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

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

то для вставки вы просто сделаете это

insert into @TableName (ColumnName, ColumnName2)
select 1, 'A'

Ответ 5

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