Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
SQL2008, фамилия, имя, отчество и дата рождения
9 июн 15, 11:03    [17748381]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20583
Demon737
фамилия, имя, отчество и дата рождения

На этой хрени есть УНИКАЛЬНЫЙ ИНДЕКС?
9 июн 15, 11:08    [17748409]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Akina, Нет, но повесить думаю можно
9 июн 15, 11:10    [17748422]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20583
Demon737, поскольку индекса нет - ты не можешь ГАРАНТИРОВАТЬ целостности данных. То, что твой софт пытается её обеспечить, игнорируя наличие штатной возможности - бардак.

Создай индекс. Уникальный. Программно обеспечь унификацию вводимых данных (например, замена латиницы на кириллицу, приведение регистра, ликвидация пробелов). Эти мероприятия обеспечат ГАРАНТИЮ уникальности (для решения текущей задачи не так важно, но важно идеологически, и убережёт от ошибок).
После чего читай справку по MERGE. Версия сервера позволяет.
9 июн 15, 11:15    [17748462]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Да вот сейчас разбираюсь с MERGE, насчет целостности это понятно, я только начал работать а бардак на конторе сильный и многие старые программы и базы данных просто в печальном виде(
9 июн 15, 11:18    [17748486]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20583
Akina
Программно обеспечь унификацию вводимых данных (например, замена латиницы на кириллицу, приведение регистра, ликвидация пробелов).

Это я имел в виду не преобразования на клиенте (хотя и там контроль обязателен), а контроль с использованием триггерной логики либо оформление логики добавления/обновления данных в виде хранимых процедур.
9 июн 15, 11:26    [17748531]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Ну я только учусь, опыта не много, тригеры и функции писал уже простенькие но щас задачи другие дали...
9 июн 15, 11:28    [17748546]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Demon737
но щас задачи другие дали...

Эта задача на элементарное соединение 2х таблиц
9 июн 15, 11:30    [17748558]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Что то не могу додуплить с этим MERGE
Вот такой запрос получился:
MERGE INTO [DB1].dbo.Owners as o
USING
(SELECT DISTINCT own.FmOwn,own.NmOwn,own.PtOwn,own.BirthDate
FROM [DB1].dbo.Owners AS own) AS own (FmOwn,NmOwn,PtOwn,BirthDate) ON (o.FmOwn<>own.FmOwn and o.NmOwn<>own.NmOwn and o.PtOwn<>own.PtOwn and o.BirthDate<>own.BirthDate
WHEN MATCHED THEN
INSERT (o.FK_Filial,o.FmOwn,o.NmOwn,o.PtOwn,o.TypeOwn,o.BirthDate) VALUES (1,own.FmOwn,own.NmOwn,own.PtOwn,2,own.BirthDate);
Выдает ошибку при его выполнении:
Список вставляемых столбцов, используемый в инструкции MERGE, не может содержать составные идентификаторы. Используйте однокомпонентные идентификаторы.
9 июн 15, 11:46    [17748692]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Demon737
Что то не могу додуплить с этим MERGE
Вот такой запрос получился:
MERGE INTO [DB1].dbo.Owners as o
USING
(SELECT DISTINCT own.FmOwn,own.NmOwn,own.PtOwn,own.BirthDate
FROM [DB2].dbo.Owners AS own) AS own (FmOwn,NmOwn,PtOwn,BirthDate) ON (o.FmOwn<>own.FmOwn and o.NmOwn<>own.NmOwn and o.PtOwn<>own.PtOwn and o.BirthDate<>own.BirthDate
WHEN MATCHED THEN
INSERT (o.FK_Filial,o.FmOwn,o.NmOwn,o.PtOwn,o.TypeOwn,o.BirthDate) VALUES (1,own.FmOwn,own.NmOwn,own.PtOwn,2,own.BirthDate);
Выдает ошибку при его выполнении:
Список вставляемых столбцов, используемый в инструкции MERGE, не может содержать составные идентификаторы. Используйте однокомпонентные идентификаторы.
9 июн 15, 11:47    [17748701]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Demon737
Что то не могу додуплить с этим MERGE

Вы точно знаете, что такое JOIN ?
Вы можете написать элементарный запрос select из 2х таблиц с join-ом ?
9 июн 15, 11:50    [17748722]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Glory, да, но эти 2е таблицы вообще некаким боком не соеденяются, они из разных БД и мне просто нужно вытащить инфу в 1ую чтобы было что то вроде справки.
9 июн 15, 11:54    [17748743]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Зачем тут MERGE - ума не приложу!
Если надо только вставить то, чего ещё нет?!
9 июн 15, 11:55    [17748748]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
iap, да. но у этих 2ух таблиц нет никаких общих полей или других таблиц по которым бы можно было привязать
9 июн 15, 11:58    [17748763]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Demon737
Glory, да, но эти 2е таблицы вообще некаким боком не соеденяются, они из разных БД и мне просто нужно вытащить инфу в 1ую чтобы было что то вроде справки.

Фейспалм
9 июн 15, 12:00    [17748778]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Glory,ну обьясни мне дураку на примере каком нибудь в чем я туплю и как сделать?
9 июн 15, 12:02    [17748789]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Demon737
Glory,ну обьясни мне дураку на примере каком нибудь в чем я туплю и как сделать?

Надо идти изучать JOIN. И тренироваться писать запросы с участием 2х таблиц
9 июн 15, 12:03    [17748798]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Demon737
iap, да. но у этих 2ух таблиц нет никаких общих полей или других таблиц по которым бы можно было привязать
Тогда всё. Суши вёсла!
Бессмыслица какая-то
9 июн 15, 12:06    [17748823]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Demon737
Glory,ну обьясни мне дураку на примере каком нибудь в чем я туплю и как сделать?


INSERT INTO [DB1].dbo.Owners 
SELECT 1,isNULL(LTRIM(RTRIM(o.FmOwn)),''),isNULL(LTRIM(RTRIM(o.NmOwn)),''),isNULL(LTRIM(RTRIM(o.PtOwn)),''),2,isNULL(o.BirthDate,0),NULL
FROM [DB2].dbo.Owners as o LEFT JOIN [DB1].dbo.Owners as own ON
LTRIM(RTRIM(o.FmOwn)) = LTRIM(RTRIM(own.FmOwn)) AND
LTRIM(RTRIM(o.NmOwn)) = LTRIM(RTRIM(own.NmOwn)) AND
LTRIM(RTRIM(o.PtOwn)) = LTRIM(RTRIM(own.PtOwn)) AND
o.BirthDate = own.BirthDate

WHERE own.FmOwn IS NULL 


Для начала проверьте, что

SELECT 1,isNULL(LTRIM(RTRIM(o.FmOwn)),''),isNULL(LTRIM(RTRIM(o.NmOwn)),''),isNULL(LTRIM(RTRIM(o.PtOwn)),''),2,isNULL(o.BirthDate,0),NULL
FROM [DB2].dbo.Owners as o LEFT JOIN [DB1].dbo.Owners as own ON
LTRIM(RTRIM(o.FmOwn)) = LTRIM(RTRIM(own.FmOwn)) AND
LTRIM(RTRIM(o.NmOwn)) = LTRIM(RTRIM(own.NmOwn)) AND
LTRIM(RTRIM(o.PtOwn)) = LTRIM(RTRIM(own.PtOwn)) AND
o.BirthDate = own.BirthDate

WHERE own.FmOwn IS NULL 

Возвращает вам нужные записи.
9 июн 15, 13:07    [17749205]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Вот так получается будет правильно?

INSERT INTO [DB1].dbo.Owners 
SELECT DISTINCT 1,
isNULL(LTRIM(RTRIM(o.FmOwn)),''),
isNULL(LTRIM(RTRIM(o.NmOwn)),''),
isNULL(LTRIM(RTRIM(o.PtOwn)),''),
2,
isNULL(o.BirthDate,0),
NULL
FROM [DB2].dbo.Owners as o
join [DB1].dbo.Owners as own on isNULL(LTRIM(RTRIM(o.FmOwn)),'')<>isNULL(LTRIM(RTRIM(own.FmOwn)),'')
and isNULL(LTRIM(RTRIM(o.NmOwn)),'')<>isNULL(LTRIM(RTRIM(own.NmOwn)),'')
and isNULL(LTRIM(RTRIM(o.PtOwn)),'')<>isNULL(LTRIM(RTRIM(own.PtOwn)),'')
and isNULL(o.BirthDate,0)<>isNULL(own.BirthDate,0)
9 июн 15, 13:10    [17749225]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Demon737,

для Вас что [INNER] JOIN, что LEFT [OUTER] JOIN, - всё равно?
Правда, я не понимаю, о чём мы вообще говорим, если
Demon737
у этих 2ух таблиц нет никаких общих полей или других таблиц по которым бы можно было привязать
9 июн 15, 13:12    [17749241]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Кролик-зануда
Guest
Demon737,

жесть.
а Вы пробовали выполнить написанный вами селект(без вставки)?
или вот вам кто-нибудь сейчас ответит - "да, всё прваильно" - и вы без проверки запустите свой шедевр?
9 июн 15, 13:13    [17749245]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Я сейчас и проверяю как раз
9 июн 15, 13:17    [17749269]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Demon737
Member

Откуда:
Сообщений: 20
Все разобрался)
9 июн 15, 13:35    [17749401]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли реализована проверка на добавление уникальных записей в таблицу  [new]
Dronson and Dronson
Member

Откуда: Санкт-петербург
Сообщений: 7
Предлагаю такой запрос (на нужной базе, чтобы не писать полное имя таблицы):
USE DB1

--insert Owners
Select Distinct top 1
  1, LTRIM(RTRIM( Isnull(O.FmOwn,''))), LTRIM(RTRIM( Isnull(O.NmOwn,''))), LTRIM(RTRIM( Isnull(O.PtOwn,''))), 2, Isnull(O.BirtDate,0), NULL
from DB2.dbo.Owners O, Owners
where NOT( LTRIM(RTRIM( Isnull(O.FmOwn,''))) = LTRIM(RTRIM( Isnull(Owners.FmOwn,''))) and LTRIM(RTRIM( Isnull(O.NmOwn,''))) = LTRIM(RTRIM( Isnull(Owners.NmOwn,'')))  and LTRIM(RTRIM( Isnull(O.PtOwn,''))) = LTRIM(RTRIM( Isnull(Owners.PtOwn,'')))  and Isnull(O.BirtDate,0) = Isnull(Owners.BirtDate,0))


PS. если эти поля должны быть уникальны, то рекомендую на обеих таблицах сделать их Not NULL (предварительно заполнив если есть пустые) и создать уникальный индекс по этим полям.
PS. запрос я проверил на имеющихся таблицах, рекомендую еще раз проверить - там указан top 1.
9 июн 15, 14:18    [17749712]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить