У меня следующая ситуация — есть пачка хранимых процедур, работающих на 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?
Здравствуйте, 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;
Здравствуйте, 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, которое, как я понял не нужна), а потом вставить те данные, которые нужны.