很奇怪的问题。

ah_2056 2013-08-27 08:37:06
1、关系视图在备份的时候丢失了。
2、丢失后关系视图没有了,但是删除某些表的时候居然说我外键约束存在删不掉

奇葩,各位有木有遇到过。
...全文
135 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2013-08-27
  • 打赏
  • 举报
回复
引用 2 楼 hdhai9451 的回复:
[quote=引用 1 楼 wwwwgou 的回复:] #1.关系视图指的是什么?数据库关系图吗 #2.外键跟关系视图没关系吧。展开-》表-》键-》看一下下面的外键是否存在 #3.有没有外键,都可以删除表。楼主详细的提示信息是什么?
1. 删除表数据的时候,如果有外键约束就删除不掉,这个时候要先删除外键关联的表的数据,表结构保留。 2. 删除表是DDL命令,删除表结构,表结构不存了,当然数据也不会存在。这时要删除表,如果外键表还存在,那么这个表是不能删除的。1楼的第三点说法有问题[/quote] Andy正确,是我搞错了。看下面:
--创建t1表
CREATE TABLE t1(id INT NOT NULL PRIMARY KEY, NAME VARCHAR(100))
INSERT t1 SELECT 1, 'name1' UNION ALL SELECT 2, 'name2'
GO
--创建t2表
CREATE TABLE t2(id INT, NAME VARCHAR(100))
INSERT t2 SELECT 1, 'nameb1' UNION ALL SELECT 1, 'nameb2'
GO
--给t2添加外键约束
ALTER TABLE t2
ADD CONSTRAINT fk_t2_t1
FOREIGN KEY(id)
REFERENCES t1(id)
GO

--删除t1,报错(刚才测试:如果这里用SSMS删除,在表名上单击右键->删除,这样是可以删除的,看来是有些问题了;现在测试又删除不掉了)
DROP TABLE t1
/*
消息 3726,级别 16,状态 1,第 1 行
无法删除对象 't1',因为该对象正由一个 FOREIGN KEY 约束引用。
*/
--删除t2,不报错
DROP TABLE t2
KeepSayingNo 2013-08-27
  • 打赏
  • 举报
回复
你要检查下你要删除的表的某些字段是否作为了别的表的外键。点中你的表然后右键,按下图操作在输出的创建表脚本中查看是否有字段为外键。
Andy__Huang 2013-08-27
  • 打赏
  • 举报
回复
-- 1. 建表测试(AppUser为主表,AppUserRole为子表,AppUserRole的外键为AppUserID)
CREATE TABLE [dbo].[AppUser](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[LoginName] [nvarchar](50) NOT NULL,
	[Password] [nvarchar](50) NOT NULL,
	[NameCN] [nvarchar](50) NOT NULL,
	[NameEN] [nvarchar](50) NULL,
	[Position] [nvarchar](50) NULL,
	[Mobile] [nvarchar](50) NULL,
	[Tel] [nvarchar](50) NULL,
	[Email] [nvarchar](50) NULL,
	[Remarks] [nvarchar](500) NULL,
	[Enabled] [int] NOT NULL,
	[CreatedBy] [int] NOT NULL,
	[CreatedAt] [datetime] NOT NULL,
	[UpdatedBy] [int] NULL,
	[UpdatedAt] [datetime] NULL,
 CONSTRAINT [PK_AppUser] 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]

CREATE TABLE [dbo].[AppUserRole](
	[AppUserID] [int] NOT NULL,
	[RoleID] [int] NOT NULL,
	[Remarks] [nvarchar](50) NULL,
 CONSTRAINT [PK_APPUSERROLE] PRIMARY KEY CLUSTERED 
(
	[AppUserID] ASC,
	[RoleID] 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

ALTER TABLE [dbo].[AppUserRole] ADD  CONSTRAINT [FK_AppUserRole_AppUserID] FOREIGN KEY([AppUserID])
REFERENCES [dbo].[AppUser] ([ID])
GO


-- 2. 测试先删除主表AppUser结果报错
drop table AppUser

/*
Msg 3726, Level 16, State 1, Line 1
Could not drop object 'AppUser' because it is referenced by a FOREIGN KEY constraint.
*/

说明:如果要删除受外键约束的表,那么先删除引用外键的表,再删除外键表
Andy__Huang 2013-08-27
  • 打赏
  • 举报
回复
引用 1 楼 wwwwgou 的回复:
#1.关系视图指的是什么?数据库关系图吗 #2.外键跟关系视图没关系吧。展开-》表-》键-》看一下下面的外键是否存在 #3.有没有外键,都可以删除表。楼主详细的提示信息是什么?
1. 删除表数据的时候,如果有外键约束就删除不掉,这个时候要先删除外键关联的表的数据,表结构保留。 2. 删除表是DDL命令,删除表结构,表结构不存了,当然数据也不会存在。这时要删除表,如果外键表还存在,那么这个表是不能删除的。1楼的第三点说法有问题
Shawn 2013-08-27
  • 打赏
  • 举报
回复
#1.关系视图指的是什么?数据库关系图吗 #2.外键跟关系视图没关系吧。展开-》表-》键-》看一下下面的外键是否存在 #3.有没有外键,都可以删除表。楼主详细的提示信息是什么?

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧