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

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

Create TRIGGER CountChange
ON Sale
     FOR INSERT
  AS
   declare @SQL nvarchar (4000), @ID_old int, @table nvarchar(20),@count int
		set @SQL = 'update dbo.' + @table+ '  tb 
set tb.[count] =tb. [count] - ' + convert(nvarchar(5),@count ) + ' where tb.Id = ' + convert( nvarchar(5),@ID_old)
	
exec(@SQL)

Ошибок не выдает.На таблицу Sale есть еще один триггер, раньше когда не работал этот триггер он тоже не выполнялся. сейчас он выполняется, следовательно и этот триггер выполняется.
Вот таблица Sale:

create table sale
( ID int NOT NULL,
NumberOfSale int,
manager tinyint,
custom tinyint,
ID_old int NOT NULL,
[table] char(20) NOT NULL,
info char(150) NOT NULL,
DateOfCustom datetime NOT NULL,
[count] tinyint NOT NULL,
Price int NOT NULL,
Constraint primary key PK_Sale ([ID]))

@table - таблицы товаров, знаю, что проще сделать все в одной таблицы, в последующем так и сделаю, но сейчас нужно осуществить это именно так.
пару таблиц @table:
Код:
сreate table VGAs
(ID int NOT NULL,
Manufacturer char(30),
Model char(30),
length tinyint,
Power int,
[Count] tinyint NOT NULL,
Price int NOT NULL,
Constraint primary key PK_VGA ([ID]))


create table CPUs
(
[ID] int NOT NULL,
Manufacturer char(30),
Model char (30),
Socket tinyint,
CPU_Clock char(10),
FSB_Clock char(10),
Power int,
[Count] tinyint NOT NULL,
Price int NOT NULL,
Constraint primary key PK_CPU ([ID]))

Помогите пожалуйста разобраться почему не работает отнимание от countа...
19 июн 11, 11:15    [10836080]     Ответить | Цитировать Сообщить модератору
 Re: Триггер с использованием динамической команды  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вы сделайте print ващему @sql, и тогда все понятно станет.
19 июн 11, 11:36    [10836101]     Ответить | Цитировать Сообщить модератору
 Re: Триггер с использованием динамической команды  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Классно. Процедура не работает, значит сделаем через триггер. Руководствуетесь принципом "Я все делаю правильно, а этот гадский сервер надо мной издевается"?
Касательно триггера: считаете, что значения переменных сервер должен считывать у вас из головы? Вы хоть понимаете смысл того, что пишете? Или считаете достаточным написать лишь желаемое, а все остальное умный сервер за вас допишет? Сиквел конечно декларативен, но не настолько.
Рекомендую:
а) Ознакомиться в BOL с понятием "триггер" и псевдо-таблицами inserted и deleted
б) В SSMS есть замечательный инструмент -- отладчик. Воспользуйтесь им чтобы наконец начать понимать, что происходит в ваших процедурах/триггерах, а не тыкаться наугад.
19 июн 11, 11:49    [10836114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить