Ошибка в моем триггере - PullRequest
       6

Ошибка в моем триггере

1 голос
/ 02 октября 2010

Я работаю над проектом с использованием SqlSiteMapProvider.У меня есть две таблицы Articles и SiteMap

Таблица статей:

CREATE TABLE [dbuser].[Articles](
 [ArticleId] [uniqueidentifier] NOT NULL,
 [Title] [nvarchar](500) NULL,
 [Description] [ntext] NULL,
 [CategoryId] [int] NULL,
 [pubDate] [datetime] NULL,
 [Author] [nvarchar](255) NULL,
 [Hit] [int] NULL,
 [Auth] [bit] NULL
)...

И таблица SiteMap:

CREATE TABLE [dbuser].[SiteMap](
 [ID] [int] IDENTITY(0,1) NOT NULL,
 [Title] [nvarchar](50) NULL,
 [Description] [nvarchar](512) NULL,
 [Url] [nvarchar](512) NULL,
 [Roles] [nvarchar](512) NULL,
 [Parent] [int] NULL,
 CONSTRAINT [PK_SiteMap] PRIMARY KEY CLUSTERED 
(...

Когда я вставляю статью, моя страница asp.net также вставляетчто статьи url и такая информация в таблицу SiteMap.То, что я пытаюсь сделать, это когда я удаляю статью из моей таблицы статей (со страницы asp.net), связанную строку из таблицы SiteMap с триггером.

Моя страница asp.net вставляет информацию о статье в Sitmapтаблица в этом формате:

Dim SMUrl As String = "~/c.aspx?g=" & ddlCategoryId.SelectedValue & "&k=" & BaslikNo.ToString

Я имею в виду, что ни один столбец не совпадает точно в двух таблицах.

Мой триггер выглядит следующим образом:

USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO
SET ROWCOUNT 1
GO
ALTER TRIGGER [dbuser].[trig_SiteMaptenSil] ON [dbuser].[Articles]
AFTER DELETE
AS
BEGIN
DECLARE  @AID UNIQUEIDENTIFIER, @ttl NVARCHAR,@CID INT
SELECT @AID=ArticleId, @ttl = Title, @CID=CategoryId  FROM DELETED
IF EXISTS(SELECT * FROM dbuser.SiteMap WHERE Url = N'~/c.aspx?g=' + CONVERT(nvarchar(5), @CID) + N'&k=' + CONVERT(nvarchar(36), @AID))
BEGIN
 DELETE FROM dbuser.SiteMap WHERE Url = N'~/c.aspx?g=' + CONVERT(nvarchar(5), @CID) + N'&k=' + CONVERT(nvarchar(36), @AID)
END
END
GO

Яс использованием SSMSE 2008 и версия моего удаленного сервера БД 8.0

Я получаю ошибку:

Строки не были удалены.Произошла ошибка при попытке удалить строку 1. Источник ошибки: Microsoft.VisualStudio.DataTools.Сообщение об ошибке: Обновленные или удаленные значения строки либо не делают строку уникальной, либо изменяют несколько строк (2 строки).Исправьте ошибки и попробуйте снова удалить строку или нажмите ESC, чтобы отменить изменения.

Можете ли вы помочь мне, как заставить это работать?Я искал это в течение нескольких дней .. Не могу найти решение для моего случая ...

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

1 Ответ

1 голос
/ 03 октября 2010

Чтобы справиться с исходной проблемой и справиться с удалением нескольких строк, ваш триггер можно переписать следующим образом.

ALTER TRIGGER [dbuser].[trig_SiteMaptenSil] ON [dbuser].[Articles]
AFTER DELETE
AS
BEGIN
 SET NOCOUNT ON

DELETE
FROM   s
FROM   dbuser.SiteMap     AS s
       INNER JOIN Deleted AS d
       ON     s.Url = N'~/c.aspx?g=' + CONVERT(nvarchar(5), d.CategoryId) + N'&k=' 
                                     + CONVERT(nvarchar(36), d.ArticleId)

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...