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

Откуда:
Сообщений: 57
добрый день
просьба ответит на ламерский вопрос:

в mssql 2005 есть таблица вида
[name datetime data]

нужно раз в час брать из этой таблицы значение data строки с name 'xxx'
и вставлять в эту же таблицу новую строку с name 'yyy' с взятым ранее data и текущим datetime

обычные запросы я понимаю как делать, а чтобы что-то чему-то присваивать - никогда не сталкивался.
27 ноя 17, 15:54    [20986420]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1527
harbor
добрый день
просьба ответит на ламерский вопрос:

в mssql 2005 есть таблица вида
[name datetime data]

нужно раз в час брать из этой таблицы значение data строки с name 'xxx'
и вставлять в эту же таблицу новую строку с name 'yyy' с взятым ранее data и текущим datetime

обычные запросы я понимаю как делать, а чтобы что-то чему-то присваивать - никогда не сталкивался.
И при чем тут функция?
Почитайте про обычный запрос Update, там все написано.
27 ноя 17, 15:59    [20986433]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Читаешь в обязательном порядке про:
1) процедуры -- в процедуре ты опишешь свою логику изменения данных
2) временные таблицы -- во временной таблице ты будешь хранить данные для промежуточных рассчетов
3) джобы -- джоб будет по созданному тобой расписанию выпонять процедуру, в которой прописана твоя бизнес логика.

ФУНКЦИЯ тебе не нужна, функция в терминах T-SQL не может модифицировать данные в таблицах.
27 ноя 17, 16:01    [20986443]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
Мне нужен не UPDATE, а INSERT наверное
с процедурами я разберусь позже. а вот как взять одну строку таблицы, видоизменить ее и вставить в другую я не соображу.
Если кто-то кинет пример хорошо, ну нет буду дальше сам копать :)
28 ноя 17, 04:27    [20987289]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
итак, есть две таблицы t1 и t2 со структурой
num, time, data
создал временную базу TEMP c такой же структурой
в нее забил строчку
n11, 12:55, 0

пишу код
USE Base
UPDATE TEMP
SET DATA=t1.DATA
WHERE (num = 'n11')

пишет ошибку The multi-part identifier "t1.DATA" could not be bound.
28 ноя 17, 06:30    [20987323]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Добрый Э - Эх
Guest
harbor
итак, есть две таблицы t1 и t2 со структурой
num, time, data
создал временную базу TEMP c такой же структурой
в нее забил строчку
n11, 12:55, 0

пишу код
USE Base
UPDATE TEMP
SET DATA=t1.DATA -- Что такое t1 в твоем запросе???
WHERE (num = 'n11')


пишет ошибку The multi-part identifier "t1.DATA" could not be bound.
28 ноя 17, 06:40    [20987324]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Добрый Э - Эх
Guest
harbor,

для "на всякий случай" - документацию по UPDATE почитай, чтобы не придумывать собственный синтаксис, а использовать тот, что принят в MS SQL Server
28 ноя 17, 06:42    [20987325]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Добрый Э - Эх
Guest
harbor,

если лень читать всю статью про UPDATE, то прочти хотя бы ту часть, что относится к обновлению данных одной таблицы на основе данных другой таблицы....
28 ноя 17, 06:44    [20987326]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Добрый Э - Эх
Guest
harbor
Мне нужен не UPDATE, а INSERT наверное
ну и про INSERT почитать не забудь
28 ноя 17, 06:47    [20987327]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
сделал пока так

USE Base
UPDATE t1
SET [DATA]=a.[DATA]
FROM t2 a INNER JOIN t1 b ON a.NUM =b.NUM

ошибки теперь нет.
28 ноя 17, 07:11    [20987335]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
harbor
сделал пока так
USE Base
UPDATE t1
SET [DATA]=a.[DATA]
FROM t2 a INNER JOIN t1 b ON a.NUM =b.NUM

ошибки теперь нет.


КАРАМБА!

Теперь сделай
insert t1(num, time, data)
select 'n12', getdate(), t.time
from t1 as t
where num='n11'
28 ноя 17, 09:01    [20987419]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
в общем это сделал

но не знаю теперь как запускать задание каждый час со смещением в 5 минут
то есть 16-05, 17-05 и т.д.
28 ноя 17, 13:33    [20988331]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
harbor
в общем это сделал

но не знаю теперь как запускать задание каждый час со смещением в 5 минут
то есть 16-05, 17-05 и т.д.
В Jobе, вестимо. Если не Express Edition, конечно.
28 ноя 17, 13:38    [20988356]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
жоба стартует ровно с начала каждого часа
в задании прописал в начале кода
waitfor delay '00:05'

должно ждать 5 минут до выполнения основного кода//
28 ноя 17, 14:00    [20988430]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
harbor
жоба стартует ровно с начала каждого часа
в задании прописал в начале кода
waitfor delay '00:05'


должно ждать 5 минут до выполнения основного кода//
Что мешает задать точное время старта, а не в начале часа?
28 ноя 17, 14:07    [20988446]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
iap
harbor
жоба стартует ровно с начала каждого часа
в задании прописал в начале кода
waitfor delay '00:05'


должно ждать 5 минут до выполнения основного кода//
Что мешает задать точное время старта, а не в начале часа?

не нашел такой настройки в расписании..
28 ноя 17, 15:49    [20988740]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
harbor
iap
пропущено...
Что мешает задать точное время старта, а не в начале часа?

не нашел такой настройки в расписании..
Как искали то?
"Выполнять каждый час, начиная с 16:05" - будет выполняться каждый час в 5 минут.
28 ноя 17, 16:16    [20988829]     Ответить | Цитировать Сообщить модератору
 Re: как написать функцию ?  [new]
harbor
Member

Откуда:
Сообщений: 57
Minamoto
harbor
пропущено...

не нашел такой настройки в расписании..
Как искали то?
"Выполнять каждый час, начиная с 16:05" - будет выполняться каждый час в 5 минут.

пробовал, выполняет все равно ровно каждый час
хотя я задавал с начала суток с 00-05, то есть он наверное со следующего дня только начнет со смещением выполнять..
29 ноя 17, 05:11    [20990272]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить