Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перехват и замена ID поля, изменение вложенных процедур... 
:(
    Опции темы
Stranger
Дата 7.7.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



Здравствуйте!
работаю с забавной софтиной "фабрика новостей" - используется телекомпаниями для создания текстов к телепрограммам. возможностей прилично - время, роли, пользователи, права и прочие радости жизни.

сейчас планируется переезд и перенос наработанной базы со старой версии (работающей через веб-интерфейс на эмуляторе иксов) на новую (на 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)

 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.