Третью колонку я оставляю без изменения — там стоит «When the job fails», т .е. уведомления я получу только если задание завершится с ошибкой. Однако, там можно выбрать еще два варианта — когда задание завершится успешно, либо когда задание завершится вообще хоть как-то — с ошибкой, либо без ошибок.
CREATE TRIGGER PersonFormatUpdate ON [PersonFormat] FOR UPDATE AS
BEGIN
SET NOCOUNT ON
UPDATE FilmAttributeValue
SET [Value] = inserted.[Format]
FROM FilmAttributeValue
INNER JOIN inserted ON FilmAttributeValue.[ValueFormat] = inserted.ID
END
CREATE TRIGGER PersonDelete ON [Person] FOR DELETE AS
BEGIN
SET NOCOUNT ON
DELETE FROM Internet WHERE (Internet.Kind = 'P')
AND (Internet.[Object] IN ( SELECT ID FROM deleted))
END
GO
CREATE TRIGGER AlbumRoleInsert ON AlbumRole INSTEAD OF INSERT AS
BEGIN
SET NOCOUNT ON
DECLARE @ALB INT, @PRF INT, @ROL VARCHAR(500), @mas INT, @pla BIT, @mem BIT, @gue BIT
DECLARE @ID INT, @RLR VARCHAR(500)
DECLARE @Role TABLE(Role VARCHAR(100))
DECLARE LISTROLE CURSOR LOCAL FAST_FORWARD FOR
SELECT Album, Master, Performer, Play, Member, Role, SpecialGuest
FROM Inserted
OPEN LISTROLE
FETCH LISTROLE INTO @ALB, @mas, @PRF, @pla, @mem, @ROL, @gue
WHILE @@FETCH_STATUS = 0 BEGIN
-- Есть запись?
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)
INSERT INTO @Role SELECT TRIM( value ) FROM STRING_SPLIT( @RLR, ',' )
INSERT INTO @Role SELECT TRIM( value ) FROM STRING_SPLIT( @ROL, ',' )
WHERE TRIM( value ) NOT IN ( SELECT [Role] FROM @Role )
DELETE @Role WHERE (TRIM( [Role] ) = '')
SELECT @RLR = STRING_AGG ( [Role], ', ' ) FROM @Role
-- Обновление списка.
UPDATE AlbumRole SET Role = @RLR WHERE ID = @ID
END ELSE BEGIN
-- Добавление:
INSERT INTO AlbumRole ( Album, Master, Performer, Play, Member, Role, SpecialGuest )
VALUES( @ALB, @mas, @PRF, @pla, @mem, @ROL, @gue )
END
-- Следующее поле
FETCH LISTROLE INTO @ALB, @mas, @PRF, @pla, @mem, @ROL, @gue
END
CLOSE LISTROLE
DEALLOCATE LISTROLE
END
GO
значение может увеличиться на 1000Либо у вас есть репликация на этой базе данных, либо неправильно настроено восстановление после сбоя (без отката незавершённых транзакций).
с добавлением еще одного поля... логику которого нужно как раз и прописатьДа, в триггере либо вычислять пропущенный номер, либо завести отдельную таблицу неиспользованных номеров и брать из неё.
CREATE TABLE [dbo].[pallets](
[shipmentid] [int] NULL,
[shipped] AS (CONVERT([bit],case when [shipmentid] IS NULL then (0) else (1) end))
) ON [PRIMARY]
[shipped] AS (CONVERT([bit],isnull([shipmentid],(0))))
CREATE TABLE [dbo].[Product](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[NamePower] AS (([Name]+'_')+CONVERT([varchar],[ID])),
CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
в поле Name должно прилепляться id в конце названияНарушение нормальной формы.
могут ли в этом случае быть решения?С помощью вычисляемого поля вы может привести всё к одному виду используя оператор CASE.
после не повторяются при добавлении новых записейЭто нормальное поведение IDENTITY(1,1). Можно изменить получение ID. Зависит от предметной области. Лучше использовать отдельное поле "Номер". Вариантов получение непрерывной последовательности море: например, запоминать удалённые номера или вычислять их. В некоторых случаях, например, счёт-фактура — номера в хронологической последовательности в течение периода, достаточно использовать диапазон номеров.
Как правильно обновить MS SQL Express 2008 до 2008R2?А почему не до актуальной версии SQL Server 2017 Express>? Там ограничение увеличено. Сравнить доступные выпуски.