проблемы c 2000 на 2005
От: aktz Беларусь  
Дата: 03.12.06 10:23
Оценка:
У меня следующая ситуация — есть пачка хранимых процедур, работающих на MS SQL 2000. Беру базу и аттачу её к 2005. Пытаюсь запустить процедуры на 2005. Некоторые проходят, а в некоторых, где есть select во временную таблицу происходит беда.
То есть в процедуре написано вроде этого:


select z1, z2, z3 
into #temp 
from t1;

set identity_insert #temp on;



и вот на последнюю строку сервер ругается и говорит, что не может выполнить set, так как #temp не имеет identity column. На 2000 эта же процедура работает.
Более того. Если я её выполню на 2000, потом приаттачу файл базы к 2005, она и там начинает работать!
Может кто знает в чём беда?
И какие еще опасности могут подстерегать на пути миграции от 2000 к 2005?
Re: проблемы c 2000 на 2005
От: _d_m_  
Дата: 03.12.06 13:16
Оценка:
Здравствуйте, aktz, Вы писали:

A>и вот на последнюю строку сервер ругается и говорит, что не может выполнить set, так как #temp не имеет identity column. На 2000 эта же процедура работает.

A>Более того. Если я её выполню на 2000, потом приаттачу файл базы к 2005, она и там начинает работать!
A>Может кто знает в чём беда?
A>И какие еще опасности могут подстерегать на пути миграции от 2000 к 2005?

Вероятно, 2005-ый в таком случае не делает аналогичный столбец во временной таблице identity. Я бы на его месте поступил точно также.
А если так:
select z1, z2, z3 
into #temp 
from t1;

if @@microsoftversion < 0x09000000
    set identity_insert #temp on;
Re: проблемы c 2000 на 2005
От: hun  
Дата: 05.12.06 12:42
Оценка:
Здравствуйте, aktz, Вы писали:

A>У меня следующая ситуация — есть пачка хранимых процедур, работающих на MS SQL 2000. Беру базу и аттачу её к 2005. Пытаюсь запустить процедуры на 2005. Некоторые проходят, а в некоторых, где есть select во временную таблицу происходит беда.

A>То есть в процедуре написано вроде этого:


A>
A>select z1, z2, z3 
A>into #temp 
A>from t1;

A>set identity_insert #temp on;
A>



А что если выполнить exec sp_help '#temp' пока она не умерла, там как поле создается, как identity или нет. Насколько я помню, должен создаваться точно те же типы данных, которые и в t1.
И еще, это не сильно хорошо выполнять такой запрос, там блокировки возникают на все время запроса. Так что гораздо проще создать временную таблицу (причем создать ее можно без idenrity, которое, как я понял не нужна), а потом вставить те данные, которые нужны.
Re[2]: проблемы c 2000 на 2005
От: hun  
Дата: 05.12.06 12:47
Оценка:
Проблемы у меня видимо с русским языком....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.