Здравствуйте! работаю с забавной софтиной "фабрика новостей" - используется телекомпаниями для создания текстов к телепрограммам. возможностей прилично - время, роли, пользователи, права и прочие радости жизни.
сейчас планируется переезд и перенос наработанной базы со старой версии (работающей через веб-интерфейс на эмуляторе иксов) на новую (на SQL сервере + независимый собственный клиент).
в установщике идет sql-скрипт, который конфигуряет новую пустую базу. есть процедуры под соответствующими названиями типа "AddToArchNewsFromNF1" и пр...
беда в том, что у меня старых баз 2 (на разных серверах и для разных отделов), а задача стоит собрать все в 1 базу и чтобы без потери данных. посредством встроенного разработчиками механизма импорта первая база копируется нормально, без ошибок, а вот вторая на каждую запись ругается "cant insert duplicate key" или "cant insert primary key". дотумкал, что старые базы содержат одинаковые данные (не только ID, на самом деле выяснилось, что N лет назад база была одна, а потом кто-то снял копию, и запустил ее на другом серваке - с этого времени данные в базах начали отличаться).
Каким образом можно сделать так, чтобы при импорте из старой базы в новую шла проверка на совпадение ключей и в случае, если ключи одинаковые, генерировался новый?
с помощью утилиты SQL Manager 2005 for SQL Server Lite я вполне наглядно могу смотреть все таблицы, процедуры, индексы и прочие компоненты базы, но к сожалению мне по части SQL "медведъ на ухо наступил" и с программированием очень туго.
вот процедуры, которые вызываются при импорте:
| Код | CREATE proc AddToArchNewsFromNF1 @id bigint, @name nvarchar(255), @editor varchar(255), @date nvarchar(255), @hrono bigint, @description nvarchar(255) as
Declare @userid int Select @userid=userid from users where username like @editor if( @userid is NULL) begin Set @userid=0 end INSERT INTO ArcNews (id, Name, EditorId, NewsDate, Description, NewsTime, CalcTime, TaskTime, Deleted, ProgramId) VALUES (@id,@name,@userid,convert(datetime,@date),@description,@hrono,0,0,0,1)
|
| Код |
CREATE proc AddToNewsFromNF1 @id bigint, @name nvarchar(255), @editor varchar(255), @date nvarchar(255), @hrono bigint, @description nvarchar(255) as
Declare @userid int Select @userid=userid from users where username like @editor if( @userid is NULL) begin Set @userid=0 end INSERT INTO News (id, Name, EditorId, NewsDate, Description, NewsTime, CalcTime, TaskTime, Deleted, ProgramId) VALUES (@id,@name,@userid,convert(datetime,@date),@description,@hrono,0,0,0,1)
|
| Код | CREATE proc InsetIntoArchBlocsFromNF2 @id bigint, @name nvarchar(255), @newsid bigint, @blocktype int, @operator nvarchar(255), @creator nvarchar(255), @jockey nvarchar(255), @blocktime bigint, @blocktext text, @sort int AS
declare @operatorid int declare @creatorid int declare @jockeyid int
select @operatorid=userid from users where username like @operator select @creatorid=userid from users where username like @creator select @jockeyid=userid from users where username like @jockey if (@operatorid is null) begin SET @operatorid=0 end if (@creatorid is null) begin SET @creatorid=0 end if (@jockeyid is null) begin SET @jockeyid=0 end
INSERT INTO ArchBlocks (Id, Name, NewsId, BLockType, CreatorId, OperatorId, JockeyId, BlockTime, BlockText, Sort) VALUES (@id,@name,@newsid,@blocktype,@creatorid,@operator,@jockeyid,@blocktime,@blocktext,@sort)
|
| Код | CREATE proc InsetIntoBlocsFromNF2 @id bigint, @name nvarchar(255), @newsid bigint, @blocktype int, @operator nvarchar(255), @creator nvarchar(255), @jockey nvarchar(255), @blocktime bigint, @blocktext text, @sort int AS
declare @operatorid int declare @creatorid int declare @jockeyid int
select @operatorid=userid from users where username like @operator select @creatorid=userid from users where username like @creator select @jockeyid=userid from users where username like @jockey if (@operatorid is null) begin SET @operatorid=0 end if (@creatorid is null) begin SET @creatorid=0 end if (@jockeyid is null) begin SET @jockeyid=0 end
INSERT INTO Blocks (Id, Name, NewsId, BLockType, CreatorId, OperatorId, JockeyId, BlockTime, BlockText, Sort) VALUES (@id,@name,@newsid,@blocktype,@creatorid,@operator,@jockeyid,@blocktime,@blocktext,@sort)
|
|