изменить значения при insert

skais
Дата: 13.02.2010 11:48:34
Кто подскажет как в триггере для строки, которая вставляется (INSERT) изменить определенные значения полей для определенных условий.
Структура таблицы:
Name,SubName,Name2,Family
К примеру должна быть вставлена строка:'Василий', 'Петрович', 'Сидоров', NULL в таблицу тест.
Как сделать так чтобы к примеру Сидоров менялся на 'семья Сидоровых' в определенном новом поле (где пока NULL). Чтобы в итоге получилась запись для вставки: 'Василий', 'Петрович', 'Сидоров', 'семья Сидоровых'
Mnior
Дата: 13.02.2010 11:57:53
skais,
Просто не плодить излишние данные понапрасну.
SELECT Name,SubName,Name2, 'семья ' + Name2 AS Family
FROM ...
так,
Дата: 13.02.2010 12:22:57
skais
Кто подскажет как в триггере для строки, которая вставляется (INSERT) изменить определенные значения полей для определенных условий.
Структура таблицы:
Name,SubName,Name2,Family
К примеру должна быть вставлена строка:'Василий', 'Петрович', 'Сидоров', NULL в таблицу тест.
Как сделать так чтобы к примеру Сидоров менялся на 'семья Сидоровых' в определенном новом поле (где пока NULL). Чтобы в итоге получилась запись для вставки: 'Василий', 'Петрович', 'Сидоров', 'семья Сидоровых'


то что вы описуете, должно делаться в before-триггере
но он в МССКЛ, "есть" пока только в "Помечтаем, часть 2" )))
поэтому изменяйте триггер на INSTEAD OF, - в нём это можно будет сделать
skais
Дата: 13.02.2010 14:22:57
А примерчик можно?
Knyazev Alexey
Дата: 13.02.2010 14:25:34
skais
А примерчик можно?

примеры есть в BOL
Константин Цветков
Дата: 13.02.2010 15:13:50
Примерчик, пожалуйста:
CREATE TRIGGER AlbumRoleInsert ON AlbumRole INSTEAD OF INSERT AS 
BEGIN
  DECLARE @ALB INT, @PRF INT, @ROL VARCHAR(500), @mas INT, @pla BIT, @mem BIT
  SELECT @ALB = Album, @mas = Master, @PRF = Performer, @pla = Play, @mem = Member, @ROL = Role 
    FROM Inserted
  DECLARE @ID INT, @RLR VARCHAR(500)
  -- Есть запись?
  IF EXISTS( SELECT * FROM AlbumRole WHERE (Album = @ALB) AND (Performer = @PRF)) BEGIN
    SELECT @ID = ID, @RLR = Role FROM AlbumRole WHERE (Album = @ALB) AND (Performer = @PRF)
    -- Есть роль?
    IF ( CHARINDEX( @ROL, @RLR) = 0 ) BEGIN
      -- Обновление списка.
      SET @RLR = @RLR + ', ' + @ROL
      UPDATE AlbumRole SET Role = @RLR WHERE ID = @ID
    END
  END ELSE
    -- Добавление: 
    INSERT INTO AlbumRole ( Album, Master, Performer, Play, Member, Role ) 
           VALUES( @ALB, @mas, @PRF, @pla, @mem, @ROL )
END
--
GO
iap
Дата: 13.02.2010 15:36:01
Константин Цветков
Примерчик, пожалуйста:
CREATE TRIGGER AlbumRoleInsert ON AlbumRole INSTEAD OF INSERT AS 
BEGIN
  DECLARE @ALB INT, @PRF INT, @ROL VARCHAR(500), @mas INT, @pla BIT, @mem BIT
  SELECT @ALB = Album, @mas = Master, @PRF = Performer, @pla = Play, @mem = Member, @ROL = Role 
    FROM Inserted
  DECLARE @ID INT, @RLR VARCHAR(500)
  -- Есть запись?
  IF EXISTS( SELECT * FROM AlbumRole WHERE (Album = @ALB) AND (Performer = @PRF)) BEGIN
    SELECT @ID = ID, @RLR = Role FROM AlbumRole WHERE (Album = @ALB) AND (Performer = @PRF)
    -- Есть роль?
    IF ( CHARINDEX( @ROL, @RLR) = 0 ) BEGIN
      -- Обновление списка.
      SET @RLR = @RLR + ', ' + @ROL
      UPDATE AlbumRole SET Role = @RLR WHERE ID = @ID
    END
  END ELSE
    -- Добавление: 
    INSERT INTO AlbumRole ( Album, Master, Performer, Play, Member, Role ) 
           VALUES( @ALB, @mas, @PRF, @pla, @mem, @ROL )
END
--
GO
Это примерчик того, как делать не надо.
Ибо неработоспособен при вставке двух и более записей одним INSERTом.