Использование таблицы сразу после ее создания: объект не существует - PullRequest
2 голосов
/ 24 апреля 2009

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

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

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

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

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

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

Ответы [ 5 ]

9 голосов
/ 24 апреля 2009

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

2 голосов
/ 24 апреля 2009

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

2 голосов
/ 24 апреля 2009

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

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

1 голос
/ 25 апреля 2009

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

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

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

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

insert into @TableName (ColumnName, ColumnName2)
select 1, 'A'
0 голосов
/ 24 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...