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

Откуда:
Сообщений: 12
Добрый день. Есть БД на MSSQL 2005.
Существует две таблицы:

Contacts:

ID
Name (varchar)
Birthday (datetime)
...

Tasks:

ID
ContactsID
Date (datetime)
Subject (varchar)
Text (varchar)

В первой хранятся данные о контактах (Клиентах), во второй напоминания (ежедневник).
ID - увеличиваются автоматически. Дата хранится в формате datetime, в дате в таблице Tasks находится дата, когда необходимо выполнить задачу.
Задача: Автоматически добавить в таблицу Tasks напоминания о днях рождениях Контактов.
При этом надо:
1)чтобы данные о др не повторялись
2)дата дня рождения бралась только день и месяц, а год подставлялся из текущей даты
3)Tasks.Subject была равное формату: "День рождение "+Contacnts.Name
4)Tasks.Text = "Поздравить с днем рождения"
5)Tasks.ContactsID = Contacts.ID

Подскажите пожалуйста как это реализовать?
Желательно с примером, так как в sql я начинающий.

По сути должен быть реализован ежедневник, куда человек заносит записи, чтоб не забыть. А записи о днях рождениях клиентов должны заноситься автоматически, без участия пользователя из другой таблицы, и отображаться в ежедневнике.
15 май 12, 15:34    [12557565]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ИМХО лучше будет таск, который раз в день сканирует дни рождений и если кому-то повезло вызывает процедурку- событие( письмо там отправить, скидку дать ну и всякое такое)
15 май 12, 15:43    [12557663]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ой извиняюсь, не до конца прочитал постановку
15 май 12, 15:45    [12557690]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Это на один год. Если нужно на несколько лет, то надо с таблицей с числами
declare @Contacts table(ID int identity(1,1),Name varchar(50),Birthday datetime)
insert into @Contacts(Name,Birthday)
			values('Иванов Иван Иванович','20010101')
			,('Петров Петр Петрович','20080229')

											

select
	[date] = convert(datetime,case when isDate(d.cdate)=1 then d.cdate else null end)
	,[subject] = 'День рождения '+c.Name
	,[TEXT] = 'поздравить с днем рождения'
	,[contactsID] = c.ID
from	@Contacts c
		cross apply ( select cdate = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4)) d
15 май 12, 16:10    [12557972]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Спасибо огромное)
15 май 12, 16:15    [12558033]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
насчет того как обрабатывать др 29 февраля не было никаких разьяснений, поэтому запись для Task создается но дата не проставляется
15 май 12, 16:17    [12558069]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Только я не совсем понял заполнение таблмцы Contacts. Она уже заполненна. Там есть данные. Надо просто их взять и перенести в Tasks...
15 май 12, 16:19    [12558085]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
я так понимаю тут: insert into @Contacts(Name,Birthday)
values('Иванов Иван Иванович','20010101')
,('Петров Петр Петрович','20080229')
в таблицу Contacts вставляются данные,
а потом что происходит не совсем понял))

select
[date] = convert(datetime,case when isDate(d.cdate)=1 then d.cdate else null end)
,[subject] = 'День рождения '+c.Name
,[TEXT] = 'поздравить с днем рождения'
,[contactsID] = c.ID
from @Contacts c
cross apply ( select cdate = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4)) d
15 май 12, 16:21    [12558112]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Мне же надо скопировать из таблицы Contacts в таблицу Tasks.
Я так понимаю вы перепутали источник и адресат? Мне надо просто подредактировать? Или тут все правильно и я просто не понимаю?)))
15 май 12, 16:29    [12558203]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
OdIUm
Мне же надо скопировать из таблицы Contacts в таблицу Tasks.
Я так понимаю вы перепутали источник и адресат? Мне надо просто подредактировать? Или тут все правильно и я просто не понимаю?)))

Нет все правильно. Вначале я заполнил вместо тебя тестовыми данными contacts, а потом написал запрос на выборку нужных данных в Tasks. Думаю подставить insert into Tasks (поля) мой запрос не будет сложно.
15 май 12, 16:33    [12558240]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Да, спасибо огромное) Я так и подумал что надо в инсерт подставить свое) спасибо еще раз)
15 май 12, 16:51    [12558390]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Я правильно понимаю, как должен выглядеть запрос в моем случае?

     "INSERT INTO"
     "[dbo].[Tasks] ([Tasks].[Date],[Tasks].[ContactsID], [Tasks].[Subject], [Tasks].[Text])"
     "SELECT"
     " [Tasks].[Date]=convert(datetime,case when isDate(Task.Date)=1 then Task.Date else null end)
     ",[Tasks].[ContactsID]=Contacts.ID"
     ",[Tasks].[Subject]='День рождения'+c.Name"
     ", [Tasks].[Text]='Поздравить с днем рождения'"
     "FROM"
     "[dbo].[Tasks]"
     "cross apply ( select date = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),Contacts.Birthday,112),4)) Task";
15 май 12, 17:29    [12558723]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Нет. сам вижу что не правильно...черт. туплю я с такими запросами) я всего неделю изучаю sql, до этого с ним не работал. поэтому торможу...простите(
15 май 12, 17:33    [12558760]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
OdIUm
Я правильно понимаю, как должен выглядеть запрос в моем случае?
Так он не должен выглядеть ни в каком случае.
15 май 12, 17:35    [12558773]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
  "INSERT INTO"
     "[dbo].[Tasks] ([Date],[ContactsID], [Subject], [Text])"
     "SELECT"
     " [Date]=convert(datetime,case when isDate(d.Date)=1 then d.Date else null end)
     ",[ContactsID]=Contacts.ID"
     ",[Subject]='День рождения'+c.Name"
     ",[Text]='Поздравить с днем рождения'"
     "FROM"
     "[dbo].[Contacts] c"
     "cross apply ( select date = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4)) d";
15 май 12, 17:36    [12558783]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
А что такое "d"? Ну тоесть вы пишите:"isDate(d.Date)",
"[dbo].[Contacts] c"
"cross apply ( select date = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4)) d";
15 май 12, 17:39    [12558807]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
OdIUm
А что такое "d"? Ну тоесть вы пишите:"isDate(d.Date)",
"[dbo].[Contacts] c"
"cross apply ( select date = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4)) d";

это алиас подзапроса cross apply ( select date = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4))
15 май 12, 17:40    [12558820]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
"INSERT INTO"
     "[dbo].[Tasks] ([Date],[ContactsID], [Subject], [Text])"
     "SELECT"
     " [Date]=convert(datetime,case when isDate(d.Date)=1 then d.Date else null end)"
     ",[ContactsID]=c.ID"
     ",[Subject]='Äåíü ðîæäåíèÿ'+c.Name"
     ",[Text]='Ïîçäðàâèòü ñ äíåì ðîæäåíèÿ'"
     "FROM"
     "[dbo].[SalesContacts]"
     "cross apply ( select date = CONVERT(char(4),YEAR(GetDate()))+ right(CONVERT(char(8),c.Birthday,112),4)) d";


Не удалось привязать составной индетификатор c.Birthday
15 май 12, 17:46    [12558872]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
OdIUm

Не удалось привязать составной индетификатор c.Birthday

[dbo].[SalesContacts] -> [dbo].[SalesContacts] c
15 май 12, 17:50    [12558892]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Да, супер) Получилось...
а можно сделать проверку, на сущестующую идентичную запись? А то он каждый раз добавляет еще раз все данные.. тоесть я воткнул этот скрипт на запуск программы. и при 3 запусках подряд - появилось 3 одинаковые записи
15 май 12, 17:51    [12558905]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
not exists
15 май 12, 17:55    [12558926]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как сделать перенос данных из 1 табл во 2ю для ежедневника  [new]
OdIUm
Member

Откуда:
Сообщений: 12
Мистер Хенки, огромное человеческое спасибо! Я поражаюсь вашему терпению) Спасибо еще раз)
15 май 12, 18:02    [12558966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить