1

Windows 2008 Server 2008 R2 Standard で実行されている MS SQL Server 2008 (10.50.2811.0) Developer Edition (64 ビット) では、SQL Server Management Studio 内からのスクリプト生成により、同じ制約が複数回削除されるスクリプトが作成されます。

簡単な例には、tParent と tChild の 2 つのテーブルが含まれており、tChild の ParentID は tParent の ID を参照します。生成されるスクリプト (データベース コンテキスト メニュー => タスク => スクリプトの生成...) (DROP AND CREATE 用) は次のようになります。

USE [TestDb]
GO
/****** Object: ForeignKey [FK_tChild_tParent] Script Date: 08/08/2012 08:11:51 ******/
ALTER TABLE [dbo].[tChild] DROP CONSTRAINT [FK_tChild_tParent]
GO
/****** Object: Table [dbo].[tChild] Script Date: 08/08/2012 08:11:51 ******/
ALTER TABLE [dbo].[tChild] DROP CONSTRAINT [FK_tChild_tParent]
GO
DROP TABLE [dbo].[tChild]
GO
/****** Object: Table [dbo].[tParent] Script Date: 08/08/2012 08:11:52 ******/
DROP TABLE [dbo].[tParent]
GO
/****** Object: Table [dbo].[tParent] Script Date: 08/08/2012 08:11:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tParent](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Value] [int] NOT NULL,
CONSTRAINT [PK_tParent] 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]
GO
/****** Object: Table [dbo].[tChild] Script Date: 08/08/2012 08:11:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tChild](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NOT NULL,
[Name] [varchar](50) NOT NULL,
[Value] [int] NOT NULL,
CONSTRAINT [PK_tChild] 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]
GO
/****** Object: ForeignKey [FK_tChild_tParent] Script Date: 08/08/2012 08:11:51 ******/
ALTER TABLE [dbo].[tChild] WITH CHECK ADD CONSTRAINT [FK_tChild_tParent] FOREIGN KEY([ParentID])
REFERENCES [dbo].[tParent] ([ID])
GO
ALTER TABLE [dbo].[tChild] CHECK CONSTRAINT [FK_tChild_tParent]
GO

FK_tChild_tParent 制約を削除しようとする 2 つの同一の行があるのはなぜですか? また、両方の行のコメントが異なるのはなぜですか?

4

1 に答える 1

1

こちらのMicrosoft Connectで参照されているように、これは既知のバグのようです。

重複した動作が SQL2012 に存在しないことを確認できます。

于 2012-11-02T18:46:04.087 に答える