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

Откуда:
Сообщений: 34
Доброго времени суток!

Имеется таблица, которая временами пополняется. В ней есть интересный столбец, который отвечает за подразделение (назову его Firm). Чаще всего он NULL, но бывает такое, что в нём содержатся данные (id фирмы). Самая печаль происходит тогда, когда таблица обновляется. Она обновляется и добавляются новые элементы, при этом это самое поле становится снова NULL.
И мне интересно, как сделать так (через хранимую процедуру или job какой-нибудь), чтобы происходила проверка и когда появлялась новая запись, то была проверка на то, есть ли какое значение в поле Firm и если оно есть, то присваивало это значение.

Своеобразная проверка по Firm - отдел человека и ChelId - id сотрудника. Не всем новым элементам, а по ид чела, т.е. у одного чела могут быть несколько записей.

Надеюсь не запутал.
15 янв 18, 15:43    [21108160]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
artas
Member

Откуда: Киев сити
Сообщений: 1077
KOHHEKTOP,

1) Тригеры
2) Более верное, делать правильный апдейт
15 янв 18, 15:57    [21108237]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
KOHHEKTOP
Самая печаль происходит тогда, когда таблица обновляется. Она обновляется и добавляются новые элементы, при этом это самое поле становится снова NULL.
Значит, не через то место обновляете.

KOHHEKTOP
чтобы происходила проверка и когда появлялась новая запись, то была проверка на то, есть ли какое значение в поле Firm и если оно есть, то присваивало это значение.
INSERT .. ON DUPLICATE KEY UPDATE ... , firm=COALESCE(firm, VALUES(firm))
15 янв 18, 16:09    [21108297]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, а можно как-то через if [новое_значение_Firm] = [предыдущее] else [меняем_его_на_предыдущее] ?
15 янв 18, 19:16    [21108870]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
На MySQL-сервере? Нет.
15 янв 18, 19:56    [21108921]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
artas, можно подробнее про тригеры?
15 янв 18, 20:08    [21108939]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Можете подтолкнуть в какую сторону нужно думать?

USE My_BD
GO

CREATE TRIGGER TEST_FIRM ON MY_TABLE AFTER INSERT
BEGIN
UPDATE SET ChelId WHERE Firm = ....... 
END


В общем я не знаю как показать что мне нужно именно предыдущая и чтобы внимание было уделено на ChelId, а не на вообще Id
16 янв 18, 06:59    [21109344]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
Триггер тут не нужен.
Решение дано - и всё оно укладывается в один запрос. Зачем ещё огород городить?
16 янв 18, 07:52    [21109371]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, быть может Вы меня не правильно поняли.
Обратите внимание на EmploeeId - он может быть одинаковым при добавлении новых строк. И если он будет одинаковый, то мне нужно чтобы idFirmR приняло его предыдущее значение.

К сообщению приложен файл. Размер - 42Kb
16 янв 18, 09:13    [21109479]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
KOHHEKTOP, каким образом Вы идентифицируете ту конкретную запись, которую следует обновить?
16 янв 18, 09:15    [21109483]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, по наличию данных в EmploeeId. Если там NULL, то чаще всего обновлять не нужно
16 янв 18, 09:38    [21109530]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
KOHHEKTOP
Akina, по наличию данных в EmploeeId. Если там NULL, то чаще всего обновлять не нужно

Немного не так. При добавлении нового элемента, это поле у всех становится NULL, но некоторым, у кого уже было значение раньше, нужно его вернуть.
16 янв 18, 10:10    [21109654]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
KOHHEKTOP
KOHHEKTOP
Akina, по наличию данных в EmploeeId. Если там NULL, то чаще всего обновлять не нужно

Немного не так. При добавлении нового элемента, это поле у всех становится NULL, но некоторым, у кого уже было значение раньше, нужно его вернуть.

IdFirmR Становится NULL
16 янв 18, 10:11    [21109656]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
KOHHEKTOP, ты не понял вопроса.
У тебя есть набор записей. Тебе приходит запись с некими значениями полей. На основании значений каких полей ты принимаешь решение, новая это запись или обновляющая? А если обновляющая - то какую конкретную запись она должна обновить...
16 янв 18, 11:39    [21109950]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina,

Ну можно сказать что это поле DateUpdate. Т.е. если оно стало новее, то IdFirmR должно принять значение предыдущего. При это акцент ставится на EmploeeId , а не но новую запись вообще.
16 янв 18, 11:59    [21110030]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Но лучше основываться на Id. Вот пример проблемной записи. Здесь видно что появилась новая запись (с новым Id) и EmploeeId у всех записей одинаковый (выборка сделана по этому принципу), но idFirmR у него стал по умолчанию - NULL, а нужно чтобы она была как у предыдущей записи, т.е. 1881

К сообщению приложен файл. Размер - 18Kb
16 янв 18, 12:11    [21110060]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
KOHHEKTOP
Ну можно сказать что это поле DateUpdate. Т.е. если оно стало новее, то IdFirmR должно принять значение предыдущего. При это акцент ставится на EmploeeId , а не но новую запись вообще.
Ты что, не понимаешь, какую хрень говоришь? По твоим словам, если имеется наполнение, показанное на первом скриншоте, и тебе поступает запись с датой обновления 2018-01-17 ("оно стало новее" - условие выполнено, а значения остальных полей ты вообще не рассматриваешь, значит, они ни на что не влияют), то IdFirm некоей записи (какой из них? непонятно) должно стать равно значению IdFirm предыдущей записи (при какой сортировке? непонятно). И при чём тут какой-то акцент?
Включай мозг и формулируй так, чтобы любой, кто имеет исходные данные и ТОЛЬКО твои слова, мог ОДНОЗНАЧНО ПРАВИЛЬНО выполнить операцию.
KOHHEKTOP
Но лучше основываться на Id.
Не должно быть никакого "лучше" или "хуже". Должно быть строго и однозначно. Сотне человек дали исходные данные и алгоритм, и все сто сделали одинаково.
16 янв 18, 12:41    [21110190]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, имеется таблица. Она постоянно пополняется. Появляются новые записи с новым Id, при этом не всегда другие значения в столбцах меняются.
Нужно чтобы при появлении новой записи (нового Id), осуществлялась проверка по значению в столбце EmploeeId и если у новой записи EmploeeId уже существовал в таблице, то этой записи присваивается значение столбца idFirmR такое же, какое было у предыдущей записи с одинаковым EmploedId.
16 янв 18, 12:49    [21110242]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
KOHHEKTOP
проверка по значению в столбце EmploeeId и если у новой записи EmploeeId уже существовал в таблице, то этой записи присваивается значение столбца idFirmR такое же, какое было у предыдущей записи с одинаковым EmploedId.
Предыдущей - при какой сортировке? Если записей с таким EmploeeId - несколько? Ибо без сортировки понятия "предыдущая запись" - не существует.
16 янв 18, 13:03    [21110317]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
И ещё. Согласно последней формулировке, записи ТОЛЬКО добавляются. Как тогда понимать фразу об обновлении таблицы в первом сообщении?
16 янв 18, 13:05    [21110323]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, сортировка по столбцу Id. В том то и дело, что записей с EmploeeId может быть несколько, но Id у них будет разный и тот, что больше, тот и новее.
Про обновление писал когда имел ввиду что фактически выглядит так, что запись обновляется (EmploeeId же одинаковый и как бы запись одна), хотя на самом деле записи добавляются.

Понимаю что запутал в конец.
Пробовал через LAG и LEAD, но SQL 2008 и не поддерживает их. А принцип мне нужен почти такой же, что они и выполняют.
16 янв 18, 13:38    [21110517]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
На самом деле сортировка не особо важно.
Достаточно примитивно осуществить проверку, что при добавлении новой записи, смотрелось на EmploeeId и если оно уже есть в базе, то этой новой записи присваивалось значение idFirmR такое же, какое было у EmploeeId. Пусть даже это будет NULL

Как то так...
16 янв 18, 13:43    [21110546]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
хочется какой-то бред в виде
UPDATE My_Table SET idFirmR = idFirmR where EmploeeId = EmploeeId


И засунуть это в триггер. Но разумеется оно так не прокатит.
16 янв 18, 14:46    [21110882]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
KOHHEKTOP
но SQL 2008 и не поддерживает их
У Вас, я извиняюсь, какой именно сервер БД?
16 янв 18, 15:18    [21111053]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, MySQL 2008 Ent
16 янв 18, 15:45    [21111211]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить