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

Откуда: Зеленоград, Москва, Россия
Сообщений: 20536
KOHHEKTOP, такой версии не существует. Проверьте по буквам.
16 янв 18, 15:51    [21111236]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, SQL SERVER 2008 R2 Enterprise Edition
16 янв 18, 16:05    [21111298]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20536
Так это MS SQL, а не MySQL. Вообще другой сервер, и другой соответственно раздел форума.
16 янв 18, 16:13    [21111331]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Akina, т.е. мне переезжать туда и тут помощи не будет?
16 янв 18, 16:39    [21111463]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20536
Создать тему в профильном разделе в любом случае есть смысл. Или подождать, возможно, модератор перенесёт...
Возможно, помощь будет и тут. Но вряд ли от меня - я так и не смог до конца понять происходящее.
16 янв 18, 16:56    [21111529]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
artas
Member

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

SELECT version();

что вернет?
16 янв 18, 16:59    [21111545]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
karapuzov
Member

Откуда: Харьков
Сообщений: 12
Akina,

есть вот такой вот кастылик, думаю разберетесь

CREATE
TRIGGER nullCorr ON test_empl
AFTER INSERT
AS
IF (select idfirm from inserted ins) is null
BEGIN
update test_empl
set idfirm = (select max(isnull(idfirm, 0)) from test_empl te where te.empid = (select empid from inserted ins))
where id = (select id from inserted ins);
END
GO
16 янв 18, 18:07    [21111734]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
karapuzov
Member

Откуда: Харьков
Сообщений: 12
ну или если немного подкрутить то лучше вот так

CREATE TRIGGER nullCorr ON test_empl
INSTEAD OF INSERT
AS
  IF (select idfirm from inserted ins) is null
BEGIN
  INSERT INTO test_empl
    SELECT distinct new.id, new.empid, old.idfirm 
      from inserted new
      join test_empl old on new.empid = old.empid 
      and old.idfirm is not null
END
GO
16 янв 18, 18:27    [21111778]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
miksoft
Member

Откуда:
Сообщений: 38470
KOHHEKTOP
при добавлении новой записи, смотрелось на EmploeeId и если оно уже есть в базе, то этой новой записи присваивалось значение idFirmR такое же, какое было у EmploeeId
Я бы предложил связку idFirmR - EmploeeId вынести в отдельную таблицу.
Тогда проблема исчезнет сама собой.
А при необходимости ее можно джойнить с основной таблицей и получать все те idFirmR, которые нужны.

Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 16 янв 18, 21:14
16 янв 18, 20:33    [21112064]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

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

выдает ошибку на 6 строку
"имя столбца или число представленных значений не соответствует определению таблицы"
17 янв 18, 06:11    [21112537]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Massa52
Member

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

Поскольку это не Update а уже INSERT - надо перечислить все необходимые поля для Insert.
17 янв 18, 10:18    [21112941]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
iiyama
Member

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

Критика:

1. IF (select idfirm from inserted ins) is null -- ?
2. INSTEAD OF INSERT -- ?
3. from inserted new join test_empl old on new.empid = old.empid
and old.idfirm is not null -- ?

Вывод:

Если у Вас рабочая система, то не годно. Для лабы- хз, я б не принял
17 янв 18, 10:34    [21112990]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
karapuzov
Member

Откуда: Харьков
Сообщений: 12
Для правильного решения нужно знать что это за система(хотябы в рамках текущей задачи), какие объемы и частота и т.д. и пр.

Как костыль или для лабы - годится.
Дальше пусть автор решает что нужно или важно.
17 янв 18, 12:32    [21113426]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
karapuzov
ну или если немного подкрутить то лучше вот так

CREATE TRIGGER nullCorr ON test_empl
INSTEAD OF INSERT
AS
  IF (select idfirm from inserted ins) is null
BEGIN
  INSERT INTO test_empl
    SELECT distinct new.id, new.empid, old.idfirm 
      from inserted new
      join test_empl old on new.empid = old.empid 
      and old.idfirm is not null
END
GO

я не в силах вникнуть в сие творение, расшифруйте
если вставка больше одной записи - fail
если повезло и вставка одной, то вставляем беря данные из той же таблицы которая пустая :) т.е. не вставляем никогда
прелестно
17 янв 18, 12:54    [21113534]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

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

Откуда: Харьков
Сообщений: 12
KOHHEKTOP,

1. может ли один eployeeid иметь разные firmId(включая null) - тогда, какой из firmId брать (последний/макисмальный)
17 янв 18, 16:36    [21114399]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
karapuzov
Member

Откуда: Харьков
Сообщений: 12
2. какое поле можно брать для уникальности
17 янв 18, 16:37    [21114404]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

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

1) Может. Последний
2) Id
17 янв 18, 17:24    [21114563]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
karapuzov
Member

Откуда: Харьков
Сообщений: 12
тогда если по всем входным условиям то
можно сделать так

CREATE 
TRIGGER [get_prev_firmID] ON ohot_source.dbo.test_add_last_val
INSTEAD OF INSERT 
AS
SET NOCOUNT ON
BEGIN
	-- if table is empty
	if ( (select count(1) from test_add_last_val) < 1 )
		BEGIN INSERt into test_add_last_val SELECT * FROM inserted END ;
	ELSE 
	-- if table not empty
	BEGIN 
	insert into test_add_last_val (id, empID, firmID) -- add here all other columns needed for insert except "firmID"
	select new.id, new.empID, -- add here all other columns needed for insert except "firmID"
		CASE WHEN (new.firmID is null and old.oldrow = 1) THEN old.firmID 
			ELSE new.firmID END AS firmID
		from inserted new
		LEFT OUTER JOIN (
		select tt.empID, tt.firmID, 1 as oldrow from 
			(select empID, firmID, ROW_NUMBER() OVER(partition by empID order by tupd desc) rown 
				from test_add_last_val) tt where tt.rown = 1
				) old 
		ON new.empID = old.empID
	END
END;
GO


Проблемка остается только если в пустую таблицу записывается несколько записей - в БД все ляжет без использования триггера, потом все отрабатывает как требуется, можно подключить курсор конечно... но это будет медленно
18 янв 18, 15:08    [21116846]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

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

не могу понять что за select tt.empID
19 янв 18, 13:43    [21120105]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
Кусочек
Guest
KOHHEKTOP
karapuzov,

не могу понять что за select tt.empID


select tt.empID, tt.firmID, 1 as oldrow from 
			(select empID, firmID, ROW_NUMBER() OVER(partition by empID order by tupd desc) rown 
				from test_add_last_val) tt --Вот же:) 
19 янв 18, 13:48    [21120131]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
KOHHEKTOP
Member

Откуда:
Сообщений: 34
Кусочек, на всё это мне пишет "неправильный синтаксис около ключевого слова "where"

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

Откуда: Харьков
Сообщений: 12
Дык ведь там не INTERESTED должно быть а INSERTED
23 янв 18, 14:06    [21130593]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
KOHHEKTOP,

where за скобку засунуть
23 янв 18, 14:09    [21130607]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическое добавление значения при добавлении элемента в таблице  [new]
karapuzov
Member

Откуда: Харьков
Сообщений: 12
и вот этот кусок неправильно... я там не просто 2 раза выборку завернул и добавил (where tt.rown = 1)

К сообщению приложен файл. Размер - 7Kb
23 янв 18, 14:13    [21130649]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить