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

Откуда:
Сообщений: 6
Добрый день.
С помощью такого запроса:
INSERT INTO CallCentr (DT,Organization,Tel,Person,Importance,WatsProblem,DUser) VALUES (:DAT,'',:CID,'','','','Infinity')
в базу добавляются новые записи ,содержащие дату звонка клиента и номер его телефона.
Проблема в том, что многие клиенты перезванивают по многу раз и каждый раз регистрируется новая запись в базе.
Как написать запрос так, чтоб сначала искался дубль записи за текущий день и новая запись добавлялась бы только в случае отстутсвия аналогичной за текущий день.
9 авг 11, 17:35    [11093327]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
komr
Как написать запрос так, чтоб сначала искался дубль записи


Очевидный встречный вопрос: как определяется дубликат записи, изложите алгоритм.
9 авг 11, 17:40    [11093370]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
komr
Member

Откуда:
Сообщений: 6
запрос вставляет строку, там всего 2 переменные - дата и номер телефона. Надо сначала проверить наличие такой строки в базе (полное совпадение) и в случае отстутствия, добавить запись.
9 авг 11, 17:46    [11093409]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
Glory
Member

Откуда:
Сообщений: 104751
MERGE если версия сервера позволяет
9 авг 11, 17:48    [11093415]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
komr,

EXISTS
LEFT JOIN
9 авг 11, 17:48    [11093416]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
komr
Member

Откуда:
Сообщений: 6
я не программист, не могли бы вы подсказать полный текст запроса.
9 авг 11, 17:49    [11093424]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
CREATE UNIQUE INDEX iCallCentrDTTel ON CallCentr(DT,Tel) WITH(IGNORE_DUP_KEY=ON);
Это если в дате время нулевое
9 авг 11, 17:51    [11093436]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
Crimzic
Member

Откуда: Sydney
Сообщений: 59
Уникальный индекс с IGNORE_DUP_KEY = ON ?
9 авг 11, 17:51    [11093437]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
komr
Member

Откуда:
Сообщений: 6
iap
CREATE UNIQUE INDEX iCallCentrDTTel ON CallCentr(DT,Tel) WITH(IGNORE_DUP_KEY=ON);
Это если в дате время нулевое


в дате время не нулевое...
9 авг 11, 18:03    [11093520]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
komr
я не программис


...но версию сервера вам сказать таки придется.
9 авг 11, 18:19    [11093602]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
komr
iap
CREATE UNIQUE INDEX iCallCentrDTTel ON CallCentr(DT,Tel) WITH(IGNORE_DUP_KEY=ON);
Это если в дате время нулевое


в дате время не нулевое...
Значит, в индекс поместить вычисляемое поле.
Вычисление - обнуление времни существующего поля.
9 авг 11, 20:37    [11093996]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
komr
Member

Откуда:
Сообщений: 6
SamMan
komr
я не программис


...но версию сервера вам сказать таки придется.


8.0 SP3
10 авг 11, 09:07    [11095099]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
komr
8.0 SP3


Ух, как вы в прошлом подзадержались...
Ну значит ни о каких МЕРЖ-ах речи не идет, юзайте совет iap выше: вычисляемое поле, в него дата(без времени), поверх всего - CREATE UNIQUE INDEX.
10 авг 11, 12:10    [11096496]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
komr
Member

Откуда:
Сообщений: 6
SamMan
komr
8.0 SP3


Ух, как вы в прошлом подзадержались...
Ну значит ни о каких МЕРЖ-ах речи не идет, юзайте совет iap выше: вычисляемое поле, в него дата(без времени), поверх всего - CREATE UNIQUE INDEX.

не смогу я съюзать, буду очень признателен за готовый код.
10 авг 11, 12:27    [11096679]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в таблицу с фильтром  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
komr
буду очень признателен за готовый код.


Ох... Ну - держите. Поможет ли он вам? Там же и так все элементарно.
USE master
go
CREATE DATABASE [~DB~]
go
USE [~DB~]
go
create table Clients (CLid int identity PRIMARY KEY, Date_Time datetime, Tel char(10),
	Date_no_Time as CONVERT(char(8), Date_Time, 112))
CREATE UNIQUE INDEX iCallCentrDTTel ON Clients(Date_no_Time, Tel) WITH(IGNORE_DUP_KEY=ON);
go
--Test
insert Clients values (GETDATE(), '4951112233')
insert Clients values ('20101227', '4957778899')
GO
select * from Clients
insert Clients values (GETDATE(), '4951112233')
insert Clients values (GETDATE(), '4950000000')
GO
select * from Clients
-- clean
USE master
go
DROP DATABASE [~DB~]
go
10 авг 11, 16:29    [11099158]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить