У меня есть такая таблица по умолчанию

+--+----------+--------+------+
|Id|class_name|class_id|medals|
+--+----------+--------+------+
|1 |7IPA1     |7       |3     |
|2 |7IPA2     |7       |2     |
|3 |7IPA3     |7       |5     |
|4 |8IPA1     |8       |1     |
|5 |8IPA2     |8       |7     |
|6 |8IPA3     |8       |3     |
+--+----------+--------+------+

Который будет выполнен

UPDATE MYTABLE 
SET CLASS_ID = SUBSTRING(CLASS_NAME,1,4)


+--+----------+--------+------+
|Id|class_name|class_id|medals|
+--+----------+--------+------+
|1 |7IPA1     |7IPA    |3     |
|2 |7IPA2     |7IPA    |2     |
|3 |7IPA3     |7IPA    |5     |
|4 |8IPA1     |8IPA    |1     |
|5 |8IPA2     |8IPA    |7     |
|6 |8IPA3     |8IPA    |3     |
+--+----------+--------+------+

Как сохранить этот запрос? Так что когда я вставляю новые данные, этот запрос выполняется автоматически

Я использую студию управления сервером sql 2012

0
gufran 5 Сен 2016 в 03:28

3 ответа

Лучший ответ

Возможно, вы можете использовать тигра, как показано ниже

create trigger trigger_class_id on MYTABLE 
After 
  insert
as 
UPDATE 
  MYTABLE 
SET 
  CLASS_ID = SUBSTRING(CLASS_NAME, 1, 4) WHERE ID=inserted.ID
1
zpc 5 Сен 2016 в 08:41

Вы не хотите делать это как обновление. Вместо этого вы хотите иметь вычисляемый столбец .

alter table mytable add class_id as (left(class_name, 4));

Конечно, перед выполнением этой команды вы захотите убедиться, что имя столбца (class_id) еще не находится в таблице.

2
Gordon Linoff 5 Сен 2016 в 00:32

Вы можете использовать tigger или добавить этот запрос вместе с запросом вставки. тогда ваш запрос будет.

Insert into MYTABLE (class_name,class_id,medals) values('','','')
UPDATE MYTABLE 
SET CLASS_ID = SUBSTRING(CLASS_NAME,1,4)
0
Mohit Dagar 5 Сен 2016 в 11:10