powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос sql ошибка при вставке данных
16 сообщений из 16, страница 1 из 1
запрос sql ошибка при вставке данных
    #39943376
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Подскажите пожалуйста как можно устранить ошибку. В sql не разбираюсь.
Оставили выполнить небольшой скрипт, копирование данных из одной БД в другую, таблицы идентичны. Всего 3 поля.

begin tran
INSERT INTO [nprod].[dbo].[ES]
([Id]
,[WellId]
,[BringDat])
select * from [wprod].[dbo].[ES] a where not exists (
select * from [Nprod].[dbo].[ES] b where
a.id = b.id and a.[WellId] = b.[WellId] and a.[BringDat] = b.[BringDat]
)

Выдает ошибку насколько понял где-то дублируется данные. Как ее устранить?

Violation of PRIMARY KEY constraint 'PK_ES'. Cannot insert duplicate key in object 'dbo.ES'. The duplicate key value is (60046).
The statement has been terminated.
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943386
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc,
ну попробуйте как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO [nprod].[dbo].[ES]([Id],[WellId],[BringDat])
select DISTINCT a.[id],a.[wellid],a.[bringdat]
 from [wprod].[dbo].[ES] as a 
where not exists
 (
    select * from [Nprod].[dbo].[ES] b where
      a.id = b.id and a.[WellId] = b.[WellId] and a.[BringDat] = b.[BringDat]
)


авторCannot insert duplicate key in object 'dbo.ES'. The duplicate key value is (60046).
Что вернет запрос
Код: sql
1.
2.
SELECT a.[id],a.[wellid],a.[bringdat]
FROM [wprod].[dbo].[ES] as a WHERE A.[ID]=60046
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943388
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot londinium#22110301]alexzxc,
ну попробуйте как-то так:

ошибка
Msg 102, Level 15, State 1, Line 10
Incorrect syntax near 'BringDat'.

Что вернет запрос

вернул следующее
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943401
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc,
проверьте поля на null: null = null => false -- not exists не срабатывает.
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943404
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc
Выдает ошибку насколько понял где-то дублируется данные. Как ее устранить?
Ну да, строка с id=60046 уже есть, а при вставке вы это не проверяете, т.к. у вас в NOT EXISTS добавлено ещё 2 условия: "and a.[WellId] = b.[WellId] and a.[BringDat] = b.[BringDat]", что выглядит странно.
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943405
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
null = null => false
null = null => unknown
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943442
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,
а как это сделать? я полный профан в этом(
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943444
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
alexzxc
Выдает ошибку насколько понял где-то дублируется данные. Как ее устранить?
Ну да, строка с id=60046 уже есть, а при вставке вы это не проверяете, т.к. у вас в NOT EXISTS добавлено ещё 2 условия: "and a.[WellId] = b.[WellId] and a.[BringDat] = b.[BringDat]", что выглядит странно.


мне сказали что этим скриптом пользуется уже 2 года, и он не переписывает все данные, а добавляет которых нехватает.
а мне вот повезло с ним, не срабатывает.
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943530
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc,

скорее всего, ошибка в исходных данных. Есть строки с одинаковым ID. Если таких нет, то, возможно, Вы загружаете второй раз то, что уже было загружено.
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943549
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
alexzxc,

скорее всего, ошибка в исходных данных. Есть строки с одинаковым ID. Если таких нет, то, возможно, Вы загружаете второй раз то, что уже было загружено.


запрос
select * from [wprod].[dbo].[ES] where [Id]=60046
order by BringDat desc
select * from [nprod].[dbo].[ES] where [Id]=60046
order by BringDat desc

выдает результат, что записи одинаковые, но опять же не понимаю, таблицы должны быть полностью идентичны, а ошибка только на это id
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943557
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc,

попытка вставки происходит потому, что колонка bringdat имеет значение NULL.

Можно изменить часть запроса на что-то вроде

Код: sql
1.
and isnull(a.[BringDat], '19000101') = isnull(b.[BringDat], '19000101')
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943558
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc,
у Вас там BringDate равен NULL
попробуйте как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select DISTINCT a.[id],a.[wellid],a.[bringdat]
 from [wprod].[dbo].[ES] as a 
where not exists
 (
    select 1 from [Nprod].[dbo].[ES] b where
      a.id = b.id and a.[WellId] = b.[WellId] and ISNULL(a.[BringDat],'19000101') = ISNULL(b.[BringDat],'19000101')
)
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943566
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
alexzxc,

попытка вставки происходит потому, что колонка bringdat имеет значение NULL.

Можно изменить часть запроса на что-то вроде

Код: sql
1.
and isnull(a.[BringDat], '19000101') = isnull(b.[BringDat], '19000101')



обычная выборка 1000 записей показывает что null есть в обоих таблицах, на скрине из второй не видно, но есть такие записи
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943567
alexzxc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
londinium
alexzxc,
у Вас там BringDate равен NULL
попробуйте как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select DISTINCT a.[id],a.[wellid],a.[bringdat]
 from [wprod].[dbo].[ES] as a 
where not exists
 (
    select 1 from [Nprod].[dbo].[ES] b where
      a.id = b.id and a.[WellId] = b.[WellId] and ISNULL(a.[BringDat],'19000101') = ISNULL(b.[BringDat],'19000101')
)



пока не понял как в форуме правильно цитировать сообщения
выше скрин из ондой таблицы, тут из другой, null везде есть
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943579
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc
а ошибка только на это id
Потому что у вас на таблице ПК включает только одно поле - id
У вас сам принцип проверки неверный, как я уже вам написал выше; не слушайте про null-ы и дублирование записей, у вас ошибка совсем не в этом.
...
Рейтинг: 0 / 0
запрос sql ошибка при вставке данных
    #39943639
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexzxc,

Если у вас на таблице имеется первичный ключ - я так понимаю, это столбец Id, да? - то все остальные столбцы можно просто выбросить из условий сравнения в NOT EXISTS, они там только воду мутят:
Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO [nprod].[dbo].[ES]([Id],[WellId],[BringDat])
select a.[id],a.[wellid],a.[bringdat]
from [wprod].[dbo].[ES] a 
where not exists (
  select 0 from [Nprod].[dbo].[ES] b where a.id = b.id
);
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос sql ошибка при вставке данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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