SQL 查看全文目录,更新时出错
SQL Full text Catalog on view, Error on update
我为一个名为 MyBusiness 的 table 创建了 2 个视图,这 2 个视图的目的是在需要强大搜索功能的预生成表单上查看所有未批准的企业和所有已批准的企业。这就是我使用全文目录的原因。
我的Table结构:
USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MyBusiness](
[MyBusinessID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_MyBusiness_MyBusinessID] DEFAULT (newid()),
[MyBusinessDateCreated] [datetime] NOT NULL CONSTRAINT [DF_MyBusiness_MyBusinessDateCreated] DEFAULT (getdate()),
[MyBusinessActive] [bit] NOT NULL CONSTRAINT [DF_MyBusiness_MyBusinessActive] DEFAULT ((1)),
[MyBusinessContactPersonName] [varchar](max) NULL,
[MyBusinessCompanyName] [varchar](max) NULL,
[MyBusinessContactNumber] [varchar](max) NULL,
[MyBusinessEmail] [varchar](max) NULL,
[MyBusinessDescription] [varchar](max) NULL,
[MyBusinessWebPage] [varchar](max) NULL,
[MyBusinessAddress] [varchar](max) NULL,
[MyBusinessSpecialty] [varchar](max) NULL,
[MyBusinessTwitter] [varchar](max) NULL,
[MyBusinessFacebook] [varchar](max) NULL,
[MyBusinessImageURL] [varchar](max) NULL,
[MyBusinessApproved] [bit] NULL CONSTRAINT [DF_MyBusiness_MyBusinessApproved] DEFAULT ((0)),
[MyBusinessGmapLat] [varchar](max) NULL,
[MyBusinessGmapLong] [varchar](max) NULL,
[UserID] [nvarchar](128) NULL,
[ServiceURL] [varchar](max) NULL,
[EditURL] [varchar](max) NULL,
[DeleteURL] [varchar](max) NULL,
CONSTRAINT [PK_MyBusiness] PRIMARY KEY CLUSTERED
(
[MyBusinessID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
我对已批准业务的看法:
USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[vwApprovedBusiness]
WITH SCHEMABINDING
AS
SELECT
mb.MyBusinessID,
mb.MyBusinessDateCreated,
mb.MyBusinessActive,
mb.MyBusinessContactPersonName,
mb.MyBusinessCompanyName,
mb.MyBusinessContactNumber,
mb.MyBusinessEmail,
mb.MyBusinessDescription,
mb.MyBusinessWebPage,
mb.MyBusinessAddress,
mb.MyBusinessSpecialty,
mb.MyBusinessTwitter,
mb.MyBusinessFacebook,
mb.MyBusinessImageURL,
mb.MyBusinessApproved,
mb.MyBusinessGmapLat,
mb.MyBusinessGmapLong,
mb.UserID,
mbs.MyBusinessServiceType,
mb.ServiceURL
FROM dbo.MyBusiness AS mb
INNER JOIN dbo.MyBusinessService AS mbs ON mbs.MyBusinessID = mb.MyBusinessID
WHERE (mb.MyBusinessApproved = 1)
GO
我在 MyBusinessID 列上创建了一个唯一索引,以便我可以添加我的全文目录:
USE [MyDB]
GO
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET NUMERIC_ROUNDABORT OFF
GO
CREATE UNIQUE CLUSTERED INDEX [IDX_V1] ON [dbo].[vwApprovedBusiness]
(
[MyBusinessID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
然后我添加了我的全文目录:
USE [MyDB]
GO
CREATE FULLTEXT CATALOG [fiApprovedBusiness]WITH ACCENT_SENSITIVITY = OFF
AS DEFAULT
GO
每次我想更新已批准的业务并将其设置为 1 (true)
UPDATE [MyDB].[dbo].[MyBusiness] SET MyBusinessApproved = 1 where MybusinessID = '97AC226D-E58A-470A-A553-7C4A73551038'
我收到以下错误:
消息 2601,级别 14,状态 1,第 1 行
无法在具有唯一索引 'IDX_V1' 的对象 'dbo.vwApprovedBusiness' 中插入重复键行。重复键值为 (97ac226d-e58a-470a-a553-7c4a73551038).
此问题的最可能原因是 FOR UPDATE 在 table 上触发,因为它具有与视图绑定的架构。
如果您从视图中删除架构绑定,则不会发生此问题。或删除所有触发器。
注意:架构绑定视图已具体化。
我为一个名为 MyBusiness 的 table 创建了 2 个视图,这 2 个视图的目的是在需要强大搜索功能的预生成表单上查看所有未批准的企业和所有已批准的企业。这就是我使用全文目录的原因。
我的Table结构:
USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MyBusiness](
[MyBusinessID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_MyBusiness_MyBusinessID] DEFAULT (newid()),
[MyBusinessDateCreated] [datetime] NOT NULL CONSTRAINT [DF_MyBusiness_MyBusinessDateCreated] DEFAULT (getdate()),
[MyBusinessActive] [bit] NOT NULL CONSTRAINT [DF_MyBusiness_MyBusinessActive] DEFAULT ((1)),
[MyBusinessContactPersonName] [varchar](max) NULL,
[MyBusinessCompanyName] [varchar](max) NULL,
[MyBusinessContactNumber] [varchar](max) NULL,
[MyBusinessEmail] [varchar](max) NULL,
[MyBusinessDescription] [varchar](max) NULL,
[MyBusinessWebPage] [varchar](max) NULL,
[MyBusinessAddress] [varchar](max) NULL,
[MyBusinessSpecialty] [varchar](max) NULL,
[MyBusinessTwitter] [varchar](max) NULL,
[MyBusinessFacebook] [varchar](max) NULL,
[MyBusinessImageURL] [varchar](max) NULL,
[MyBusinessApproved] [bit] NULL CONSTRAINT [DF_MyBusiness_MyBusinessApproved] DEFAULT ((0)),
[MyBusinessGmapLat] [varchar](max) NULL,
[MyBusinessGmapLong] [varchar](max) NULL,
[UserID] [nvarchar](128) NULL,
[ServiceURL] [varchar](max) NULL,
[EditURL] [varchar](max) NULL,
[DeleteURL] [varchar](max) NULL,
CONSTRAINT [PK_MyBusiness] PRIMARY KEY CLUSTERED
(
[MyBusinessID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
我对已批准业务的看法:
USE [MyDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[vwApprovedBusiness]
WITH SCHEMABINDING
AS
SELECT
mb.MyBusinessID,
mb.MyBusinessDateCreated,
mb.MyBusinessActive,
mb.MyBusinessContactPersonName,
mb.MyBusinessCompanyName,
mb.MyBusinessContactNumber,
mb.MyBusinessEmail,
mb.MyBusinessDescription,
mb.MyBusinessWebPage,
mb.MyBusinessAddress,
mb.MyBusinessSpecialty,
mb.MyBusinessTwitter,
mb.MyBusinessFacebook,
mb.MyBusinessImageURL,
mb.MyBusinessApproved,
mb.MyBusinessGmapLat,
mb.MyBusinessGmapLong,
mb.UserID,
mbs.MyBusinessServiceType,
mb.ServiceURL
FROM dbo.MyBusiness AS mb
INNER JOIN dbo.MyBusinessService AS mbs ON mbs.MyBusinessID = mb.MyBusinessID
WHERE (mb.MyBusinessApproved = 1)
GO
我在 MyBusinessID 列上创建了一个唯一索引,以便我可以添加我的全文目录:
USE [MyDB]
GO
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET NUMERIC_ROUNDABORT OFF
GO
CREATE UNIQUE CLUSTERED INDEX [IDX_V1] ON [dbo].[vwApprovedBusiness]
(
[MyBusinessID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
然后我添加了我的全文目录:
USE [MyDB]
GO
CREATE FULLTEXT CATALOG [fiApprovedBusiness]WITH ACCENT_SENSITIVITY = OFF
AS DEFAULT
GO
每次我想更新已批准的业务并将其设置为 1 (true)
UPDATE [MyDB].[dbo].[MyBusiness] SET MyBusinessApproved = 1 where MybusinessID = '97AC226D-E58A-470A-A553-7C4A73551038'
我收到以下错误:
消息 2601,级别 14,状态 1,第 1 行 无法在具有唯一索引 'IDX_V1' 的对象 'dbo.vwApprovedBusiness' 中插入重复键行。重复键值为 (97ac226d-e58a-470a-a553-7c4a73551038).
此问题的最可能原因是 FOR UPDATE 在 table 上触发,因为它具有与视图绑定的架构。
如果您从视图中删除架构绑定,则不会发生此问题。或删除所有触发器。
注意:架构绑定视图已具体化。