删除一个表字段所引用的外键,并保存下来,在数据导入后再重新加入先前删除的外键
2007-12-08 00:49
344 查看
CREATE PROCEDURE GenForeignKey
@tablename varchar(200) --将要加上外键数据库里的表名
as
declare @cur cursor
declare @fk varchar(100)
declare @execsql varchar(8000)
begin
Declare @SQL varchar(8000)
SET @SQL=''
select @SQL = @SQL
+char(13)+' alter table '+a.VT
+ ' add constraint FK_'+VT+'_'+VF+'_'+VR+'_'+VP+
' foreign key('+VF+')
references '+VR+'('+VP+')'
FROM
(
SELECT 主键列ID=b.rkey
,VP=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
,VT=object_name(b.fkeyid)
,VR=object_name(b.rkeyid)
,外键列ID=b.fkey
,VF=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
FROM sysobjects a
join sysforeignkeys b on a.id=b.constid
join sysobjects c on a.parent_obj=c.id
where a.xtype='f' AND c.xtype='U'
and object_name(b.fkeyid)= @tablename
) a
print @sql
set @cur = CURSOR READ_ONLY
for
select so.name
from sysforeignkeys sf
join sysobjects so on sf.constid=so.id
join sysobjects so1 on sf.fkeyid=so1.id
where so1.name=@tablename
open @cur
FETCH NEXT FROM @cur INTO @fk
while (@@FETCH_STATUS = 0)
begin
set @execsql = 'ALTER TABLE '+@tablename+' drop CONSTRAINT ' + @fk
exec(@execsql)
FETCH NEXT FROM @cur INTO @fk
end
close @cur
deallocate @cur
end
GO
@tablename varchar(200) --将要加上外键数据库里的表名
as
declare @cur cursor
declare @fk varchar(100)
declare @execsql varchar(8000)
begin
Declare @SQL varchar(8000)
SET @SQL=''
select @SQL = @SQL
+char(13)+' alter table '+a.VT
+ ' add constraint FK_'+VT+'_'+VF+'_'+VR+'_'+VP+
' foreign key('+VF+')
references '+VR+'('+VP+')'
FROM
(
SELECT 主键列ID=b.rkey
,VP=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
,VT=object_name(b.fkeyid)
,VR=object_name(b.rkeyid)
,外键列ID=b.fkey
,VF=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
FROM sysobjects a
join sysforeignkeys b on a.id=b.constid
join sysobjects c on a.parent_obj=c.id
where a.xtype='f' AND c.xtype='U'
and object_name(b.fkeyid)= @tablename
) a
print @sql
set @cur = CURSOR READ_ONLY
for
select so.name
from sysforeignkeys sf
join sysobjects so on sf.constid=so.id
join sysobjects so1 on sf.fkeyid=so1.id
where so1.name=@tablename
open @cur
FETCH NEXT FROM @cur INTO @fk
while (@@FETCH_STATUS = 0)
begin
set @execsql = 'ALTER TABLE '+@tablename+' drop CONSTRAINT ' + @fk
exec(@execsql)
FETCH NEXT FROM @cur INTO @fk
end
close @cur
deallocate @cur
end
GO
相关文章推荐
- [导入]实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 删除一个表中所有含重复字段的数据
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- sql中删除冗余数据和一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在对列出所有组合等sql面试题
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- 删除原来的oracle数据库(用户),但不更换表空间,并重新导入数据
- 触发器记录表某一个字段数据变化的日志 包括插入insert 修改update 删除delete 操作
- 一个数据表同时两次外键引用另一个表,出现重名问题。
- 在ORACLE中给已有数据的表增加、修改、删除一个字段(或一个列)或者多个字段(或多个列)的问题
- oracle 中同一个字段-1 ,字段追加,字段部分数据删除
- 数据库主外键,级联的保存、更新和删除