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

Откуда:
Сообщений: 54
всем привет
вопрос такой
когда делается инсерт в ПРОДАЖИ, мы указываем номер продукта из "products" , как сделать чтобы, цена продукта автоматически перешлабы из "products" в ПРОДАЖИ


я пробывал через
AS (case Actions
when '' then "
else null
end),

но не пашет

заранее спсибо




create table prodaji
(
prodaji_id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
product_id int,
cenaproducta int
)



create table products
(
products_id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
naimenovanie_producta nvarchar(100),
cenaproducta int
)
30 июн 12, 12:42    [12798298]     Ответить | Цитировать Сообщить модератору
 Re: Insert from prodaji (cena) to service (cena)  [new]
qwerty112
Guest
alex212121
но не пашет

"не пашут" - негры в Африке

автор
когда делается инсерт в ПРОДАЖИ, мы указываем номер продукта из "products"

где запрос ?

и вообще,
Рекомендации по оформлению сообщений в форуме
п.6 - учи на память !
30 июн 12, 12:47    [12798304]     Ответить | Цитировать Сообщить модератору
 Re: Insert from prodaji (cena) to service (cena)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Написать правильный insert, который для продукта выберет его цену из products.
30 июн 12, 12:48    [12798307]     Ответить | Цитировать Сообщить модератору
 Re: Insert from prodaji (cena) to service (cena)  [new]
RubinDm
Member

Откуда: SPb
Сообщений: 458
alex212121,

я бы сделал как-то типа-так:
create table Products
( [Id] int identity not null,
, [Name] nvarchar(100) not null,
, [Price] decimal(19,2) not null
, primary key([Id])
)
go

create table Sales
( [Id] int identity not null
, [ProductId] int not null
, [Price] decimal(19,2) null
, [Volume] int null
, primary key([Id])
, [Total] as [Price] * [Volume]
)

create trigger Sales_After_IU
  on Sales after insert, update
as
begin

  if (not(exists(select * from [INSERTED])))
    return; -- There are no changes ...
  
  if (not(exists(
    select * from Sales S
    where ((S.Price is null) or (S.Price <= 0))
      and S.[Id] in (select NewS.[Id] from [INSERTED] NewS)
  ))) 
    return; -- There are no changes ...

  update S
  set S.[Price] = P.[Price]
  from Sales S
  join Products P on P.[Id] = S.[Id]
  where ((S.[Price] is null) or (S.[Price] <= 0))
    and S.[Id] in (select NewS.[Id] from [INSERTED] NewS)
  ;

end
go


Триггер на таблице Sales будет отлавливать вставку и изменение записей в таблицу. Если среди вставленных или измененных записей окажется запись с неуказанной ценой ( Sales.Price is null ), или если указанная цена будет заведомо неверной ( Sales.Price <= 0 ), то триггер поправит ее самостоятельно, подставив значение из Products.Price.

зы: не могли бы вы пояснить, о чем (как) Вы думаете, когда пишете имена таблиц типа "prodaji"? Мне просто интересно, как работает Ваша голова, выдумывая русские наименования для одних таблиц ("prodaji"), и английские для других таблиц ("products"). На каком основании Вы решаете, что вот ЭТУ таблицу я буду именовать русским термином, а ВОООН ту - английским. Чем таблица "prodaji" так разительно отличается от "products"? И еще... уж если Вы решили именовать таблицу русским термином, то зачем Вы записываете ее название НЕрусскими буквами? Для кого вы это пишите? Пишите латиницей с расчетом на то, что мировое сообщество, возможно, снизойдет до чтения Вашего кода, и потому не хотите пугать их русскими символами? Извините, но это все равно как китайцы писали бы латылью свои КИТАЙСКИЕ термины, аля "tai_dzi_cu_an". Или Вы пишите это с расчетом на то, что код читать будут все-таки русские люди? Если так, то почему таблица "products" не называется например "produkty"? Вобщем, непонятно.
30 июн 12, 15:14    [12798532]     Ответить | Цитировать Сообщить модератору
 Re: Insert from prodaji (cena) to service (cena)  [new]
alex212121
Member

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

спасибо огромное ты асс
30 июн 12, 22:32    [12799518]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить