Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с alter table  [new]
akimgir
Member

Откуда:
Сообщений: 7
в процедуре создается таблица, которая содержит всего 1 запись с 20 полей.
В нее с помощью alter table добавляю 2 поля в конец таблицы

alter table my_table add code_r smallint
alter table my_table add nazva_r varchar(50)

потом если в процедуре сделать выборку на вывод всей этой таблицы:
select * from my_table
то выведет все нормально. и те данные что были и два новых поля в конце

а если сделать выборку по code_r и nazva_r
select code_r, nazva_r from my_table

то получаем ошибку
Invalid column name 'code_r'.
Invalid column name 'nazva_r'.

Это именно в процедуре.
если открыть таблицу отдельно и написать этот же запрос - все выводит отлично. а в процедуре ошибка
в чем может быть причина?
ms sql server 2000
29 авг 12, 08:55    [13079665]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с alter table  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Варианты:
1. Создавайте таблицу сразу необходимой структуры;
2. Запросы, обращающиеся к добавленным полям, оформляйте в виде DSQL.

BOL->Batches:

A table cannot be changed and then the new columns referenced in the same batch.

Сообщение было отредактировано: 29 авг 12, 09:05
29 авг 12, 09:04    [13079690]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с alter table  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
akimgir,

процедура должна быть перекомпилирована.
Либо её пересоздайте, либо она должна была создаваться с опцией WITH RECOMPILE
Смотрите также sp_recompile
или http://msdn.microsoft.com/ru-ru/library/ms181647(v=sql.100)
29 авг 12, 09:16    [13079740]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с alter table  [new]
для тупых
Guest
iap
akimgir,

процедура должна быть перекомпилирована.
Либо её пересоздайте, либо она должна была создаваться с опцией WITH RECOMPILE
Смотрите также sp_recompile
или http://msdn.microsoft.com/ru-ru/library/ms181647(v=sql.100)


а чем WITH RECOMPILE-то поможет?
процедура вообще скомпилирована не будет,
с самого начала.

пример:
create table t1 (id1 int);
go

create proc t1_add
WITH RECOMPILE

as 
   alter table t1 add id2 int;
   select id2 from t1;
go


Msg 207, Level 16, State 1, Procedure t1_add, Line 6
Invalid column name 'id2'.


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

create table t1 (id1 int);
go

create proc t1_add
as 
   alter table t1 add id2 int;
   exec('select id2 from t1;')
go


Command(s) completed successfully.
29 авг 12, 12:04    [13081174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить