我正在使用SqlSiteMapProvider的項目。我有兩個表的文章和網站地圖我的觸發器錯誤
文章表:
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
)...
和網站地圖表:
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頁面中插入該格式的文章信息到爬行頁表:
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取消更改。
願您幫助我如何才能正常工作?我已經尋找這大約幾天..找不到我的情況的解決方案...提前
是否在觸發器頂部添加'set nocount on'幫助? (即所以它成爲'...開始設置NOCOUNT ON DECLARE @AID ...') – 2010-10-02 13:19:51
是的,它做了...非常感謝sooo ...我想單擊'這是一個很棒的評論'按鈕一千次..謝謝.. – wooer 2010-10-02 13:41:26
你真的很想小心,一次刪除多行的機會。 'SELECT @ AID = ArticleId,@ttl = Title,@ CID = CategoryId FROM DELETED'可能行不通,因爲您的'deleted'表將包含所有已刪除的行。 – LittleBobbyTables 2010-10-02 13:49:19