当前位置: 首页 > news >正文

删除所有的用户表,存储过程,游标的应用,动态SQL的使用

--存储过程,删除某数据库中所有的用户表,游标的应用,动态SQL的使用   
--
思路:先删除所有的外键,再删除所有的表;以免外键的存在导致不能删表
--
sys.objects表中parent_object_id表示某对象所依附的对象的ID,如外键所在表的ID
--
sys.foreign_keys表中有所有外键的信息,也有parent_object_id属性
create database test
go
use test

go
create proc dropAllUserTable as
begin
--声明游标,获得外键的名字及其所在的表的对象ID,
--sys.objects中type in ['F','U']分别表示外键及用户表
declare cursorForeignKey cursor for
select [name], parent_object_id from sys.objects where [type]='F'
open cursorForeignKey
declare @fkName nvarchar(30), @objId int, @tn nvarchar(30)
--提取外键的名字及其所在的表的对象ID到变量@fkName, @objId中
fetch next from cursorForeignKey into @fkName, @objId
while @@fetch_status=0 --删除所有的外键
begin
select @tn=[name] from sys.objects where [object_id]= @objId
set @tn=quotename(@tn)
exec('alter table ' + @tn + ' drop constraint ' + @fkName)
fetch next from cursorForeignKey into @fkName, @objId
end
close cursorForeignKey
deallocate cursorForeignKey

declare cursorTableName cursor for
select [name] from sys.objects where type='U'
open cursorTableName

fetch next from cursorTableName into @tn
while @@fetch_status=0 --删除所有的表
begin
set @tn=quotename(@tn)
exec ('drop table ' + @tn)
fetch next from cursorTableName into @tn
end
close cursorTableName
deallocate cursorTableName
end

go
--测试,a,b两表相互参照
create table a(a int primary key, b int)
create table b(a int primary key, b int references a(a))
alter table a add foreign key(b) references b(a)

--drop table a,b --出错!

exec dropAllUserTable --调用存储过程,删除所有用户表

 

转载于:https://www.cnblogs.com/seoer/archive/2011/12/24/2300291.html

相关文章:

  • 简单的回顾
  • Memcached的线程模型及状态机
  • pre标签内文本自动换行
  • 最大熵工具包的使用
  • iptables开启,通过nginx无法访问php程序
  • 在linux系统(CentOS)上安装中文支持包
  • Android -- Glide框架详解(一)
  • win7下开启web服务器
  • Graylog2+Elasticsearch+Nxlog
  • 初到51CTO
  • iOS多线程与网络开发之小文件上传
  • sqlserver 语句
  • 动态规划 List
  • A useful UrlBuilder class
  • 图解面向对象中的聚合与耦合概念
  • 《剑指offer》分解让复杂问题更简单
  • HashMap剖析之内部结构
  • Laravel 中的一个后期静态绑定
  • Object.assign方法不能实现深复制
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python语法速览与机器学习开发环境搭建
  • react 代码优化(一) ——事件处理
  • ReactNative开发常用的三方模块
  • Travix是如何部署应用程序到Kubernetes上的
  • 代理模式
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前嗅ForeSpider教程:创建模板
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 详解NodeJs流之一
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (BFS)hdoj2377-Bus Pass
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (四) Graphivz 颜色选择
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)Dubbo快速入门、介绍、使用
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)项目管理杂谈-我所期望的新人
  • .net 4.0发布后不能正常显示图片问题
  • .NET 8.0 发布到 IIS
  • .NET Core 2.1路线图
  • .NET上SQLite的连接
  • @html.ActionLink的几种参数格式
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [].slice.call()将类数组转化为真正的数组
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [C语言]——内存函数
  • [EFI]英特尔 冥王峡谷 NUC8i7HVK 电脑 Hackintosh 黑苹果efi引导文件
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [exgcd] Jzoj P1158 荒岛野人