oracle删除关联表的数据,如何删除啊!下面是我写的SQL,不知道哪里出问题了,就是运行不了!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle删除关联表的数据,如何删除啊!下面是我写的SQL,不知道哪里出问题了,就是运行不了!相关的知识,希望对你有一定的参考价值。

delete from contactcomm tcc,contact tc where tcc.lid=tc.lid and trunc(tc.createtime) >= ADD_MONTHS(trunc(sysdate), -1)

谢谢大侠们了!

参考技术A 你这个写法有问题,oracle不允许这样删除,如果想级联删除有两个方法实现:方法一:触发器解决,方法二:修改你的外键设置,达到级联删除的目的。如果不用级联删除的话就只有一个表一个表的删除,先删除contactcomm表再删除contact 表。 参考技术B oracle不允许delete多张表的操作,如果要删除两个表关联的记录可分步进行:

delete from contactcomm tcc where tcc.lid in (select tc.lid from contact tc where trunc(tc.createtime) >= ADD_MONTHS(trunc(sysdate), -1));

delete from contact tc where trunc(tc.createtime) >= ADD_MONTHS(trunc(sysdate), -1);
commit;本回答被提问者采纳

如何删除SqlServer分区函数

我们都知道,SQL server2008R2企业版以及一些其它的版本支持分区函数,当你在这些数据库备份后想在一些不支持分区函数的数据库做还原时,就会失败。

下面我们来解决这个问题。

 

1.备份数据库!备份数据库!备份数据库! (对数据库动任何刀子前先备份)

2.删除分区函数所涉及的表,因为在建表的时候我们做了关联,所以删除主要是切断这个关联以及相关的文件。

3.删除关联、删除分区文件 sql语句如下

select * from sys.partition_schemes 查询分区
select * from sys.partition_range_values 查询分区范围
select * from sys.partition_functions 查询分区函数
DROP PARTITION SCHEME 查询分区.[name]
DROP PARTITION FUNCTION 查询分区函数.[name]

执行Drop语句后再做上面的查询应该已经查不到任何内容。

删除分区文件

ALTER DATABASE [DataBase] REMOVE FILE [分区文件名];
ALTER DATABASE [DataBase] REMOVE FILEGROUP [分区文件组名]

名称可以通过对应库的创建脚本查看

.

.

.

可能有多个这样的分区和分区组手动一一执行吧

到这里所有的删除就已经完成了,备份,还原,成功!

 

这里再多分享一个我碰到的问题,上面的方法在高版本(sqlserver2016)下已经没有问题,但是碰到需要还原的数据库为低版本有兼容性问题,这个问题碰到过很多次,我的方法是在高版本下生成创建数据库的脚本和创建数据库数据的脚本,这里脚本的内容可能比较大会造成打不开的情况。所以就用远程创建一个链接服务器,将数据倒插入低版本数据库。有余表的数量较多,不可能每一个都手动来,这里提供一个脚本来生成这些插入语句。

declare @name nvarchar(50)
declare @sqltable table (sqlstr nvarchar(2000)) --插入语句的临时表
declare @para nvarchar(1000) --表列名串,因为SET IDENTITY_INSERT 语句需要有列名的情况下才可以使用,这里需要将列名拼接起来
DECLARE MyCursor CURSOR
FOR SELECT Name FROM SysObjects Where XType=‘U‘--查询库里的所有表然后遍历 
--打开一个游标
OPEN MyCursor
--匹配第一条记录
FETCH NEXT FROM MyCursor INTO @name
WHILE @@FETCH_STATUS =0
BEGIN

select @para = stuff((select ‘,‘+ltrim(name) from SYSCOLUMNS where ID=OBJECT_ID(@name )
for xml path(‘‘)),1,1,‘‘)
if exists (Select 1 From sysColumns Where id=object_id(@name) and Status=128)--判断是否存在标识键(一般是ID自增)
insert into @sqltable values(
‘SET IDENTITY_INSERT ‘[email protected]+‘ ON ‘+‘insert into ‘[email protected]+‘(‘[email protected]+‘) select ‘[email protected]+‘ from [链接服务器的库]..‘[email protected]+‘ SET IDENTITY_INSERT ‘[email protected]+‘ OFF‘
)
else
insert into @sqltable values (‘insert into ‘[email protected] + ‘ select * from [链接服务器的库]..‘[email protected])
FETCH NEXT FROM MyCursor INTO @name
END
--关闭游标
CLOSE MyCursor
--释放资源
DEALLOCATE MyCursor

select * from @sqltable

 

将查询结果全部复制出来遍可以执行了。

 

































以上是关于oracle删除关联表的数据,如何删除啊!下面是我写的SQL,不知道哪里出问题了,就是运行不了!的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何查找指定表的所有字段,该表是我自己创建的!在线求解

如何在有外键关系的表中删除数据

多表级联删除表数据特别慢

SQL 如何把两个表相关联的数据一同删除

oracle中如何用delect删除两个关联的表的一条信息,要是用delete不行那应该用啥?

oracle 删除关联表数据