Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скромное обаяние шизофрении / 4 сообщений из 4, страница 1 из 1
21.06.2002, 00:28:57
    #32033409
Кошкинсон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скромное обаяние шизофрении
Други мои! Буду краток. Почему

Код: plaintext
1.
2.
3.
4.
5.
6.
create proc p1 as 
create table #t (i int)
alter table #t add c varchar( 10 )
select c from #t
go
exec p1

говорит Invalid column name 'c'?
В то же время, если вместо с поставить *, то ж она ж эту колумнку видит:

Код: plaintext
1.
2.
3.
4.
5.
6.
alter proc p1 as 
create table #t (i int)
alter table #t add c varchar( 10 )
select * from #t
go
exec p1

i c
----------- ----------
(0 row(s) affected),

зараза такая
...
Рейтинг: 0 / 0
21.06.2002, 00:52:20
    #32033412
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скромное обаяние шизофрении
Видимо, как-то сложно оптимизирует, разрешает ссылки…
Кстати, еще любопытнее то, то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
drop proc p1
go

create proc p1 as 
create table #t (i int)
return
alter table #t add ff varchar( 10 )
select ff from #t
go

exec p1


все работает без ошибок, а так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
drop proc p1
go

create proc p1 as 
create table #t (i int)
alter table #t add ff varchar( 10 )
return
select ff from #t
go

exec p1


уже падает…

Зато так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
drop proc p1
go

create proc p1 as 
create table #t (i int)
exec('alter table #t add ff varchar(10)')
select ff from #t
go

exec p1


или вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
drop proc p1
go

create proc p1 as 
create table #t (i int)
alter table #t add ff varchar( 10 )
exec('select ff from #t')
go

exec p1


все работает "на ура".

Удачи
...
Рейтинг: 0 / 0
21.06.2002, 10:56:35
    #32033445
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скромное обаяние шизофрении
Все дело в batch-ах

BOL - Accessing and Changing Relational Data - Accessing and Changing Data Fundamentals - Using Multiple Statements - Batches

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

PS
Хотя как-то все-таки странно:
при "персональном" обращении select new_field ограничение выполняется

при "всеобщем" обращении select * - добавленное поле видно
...
Рейтинг: 0 / 0
21.06.2002, 16:52:18
    #32033490
klama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скромное обаяние шизофрении
да, прикольно... видимо, физически, таблица получает новую колонку сразу по окончании выполнения ALTER, но информация в системные таблицы (syscolumns etc) записывается по окончании бэтча-транзакции... Логично, кстати :-)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скромное обаяние шизофрении / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]