SQL数据库问题 解释一下下面的代码

2008-08-13 11:30wssqyl2000 | 分类:数据库DB | 浏览1154次
use master
go
create proc killspid
(
@dbname varchar(50)
)
as
begin
declare @sql nvarchar(500) declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('+@dbname+')'
print @sql
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@FETCH_STATUS<>-1
begin
print @spid
exec ('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
print 'OK'
end
分享到:

 
2008-08-13 17:07提问者采纳
 
use master --切换或者选中master数据库
go --上面的作为一次编译
create proc killspid--创建一个存储过程 killspid
(
@dbname varchar(50) --存储过程带有一个输入参数(参数的默认方式)
)
as --格式
begin --过程体开始
declare @sql nvarchar(500)--定义一个变量nvarchar类型@sql declare @spid int--定义一个int类型的变量@spid
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('+@dbname+')'--给变量@sql赋值 实际是一个存储过程
print @sql --输出变量@sql
exec (@sql) --执行上面的@sql语句里面的存储过程。
open getspid --
fetch next from getspid into @spid--获取存储过程查询到的值
while @@FETCH_STATUS<>-1 --如果获取到的数据集合大小!=-1
begin --循环开始
print @spid --输出@spid
exec ('kill '+@spid) --执行存储过程 (kill+@spid)整体作为一个存储过程的名称。
fetch next from getspid into @spid --回调
end --循环结束
close getspid --这2个不清楚
deallocate getspid
print 'OK'
end--存储过程体结束
这些语句一般用于数据库恢复的时候,其作用就是强制关闭已经连接到当前数据库的所有用户,以便于执行相关操作,比如数据恢复。从而妨止已经连接的用户读取到“脏”数据...

---------------------------------------------------------------------------

-- 第一部分T-SQL:
if exists (select * from sysobjects where name = 'killspbydbname')     drop procedure killspbydbname

-- 第一部分T-SQL:
create procedure killSpByDbName
@dbname varchar ( 20)
as
declare @sql nvarchar ( 500) 
declare @spid int                  
set @sql = 'declare getspid cursor for select spid from sysprocesses where dbid=db_id(''' + @dbname + ''')'                           
exec ( @sql )                   
open getspid                       
fetch next from getspid into @spid
while @@fetch_status <> -1      
begin 
exec ( 'kill ' + @spid )       
fetch next from getspid into @spid 
end 
close getspid  
deallocate getspid

-- 第三部分T-SQL:
exec killSpByDbName 'tempDataBase '    -- tempDataBase是待还原的数据

当在SQL Sever Query Analyser执行上述T-SQL时,会出现这样的错误:'CREATE PROCEDURE' must be the first statement in a query batch.  而当在第一部分T-SQL和第二部分T-SQL之间使用GO的话,就可以正确执行。请问这是为什么。还有如果在C#程序中执行上述T-SQL的话,是不能使用GO的。当然,可以使用ExecuteNonQuery分别执行第一部分T-SQL和第二部分T-SQL,但是我希望能有另一种更好的方法,可以在应用程序中一次性执行上述第一部分T-SQL和第二部分T-SQL。同样的情况也发生在第二部分T-SQL和第三部分T-SQL,当这两部T-SQL之间有GO时,不会出现问题,但当这两部分之间没有GO,且一次性执行这两部分T-SQL时,就会有这样的错误:Cannot add rows to sysdepends for the current stored procedure because it depends on the missing object 'killSpByDbName'. The stored procedure will still be created.

请各位师兄指点!谢谢!


SQL数据库问题 解释一下下面的代码 sql 存储过程学习的更多相关文章

  1. SQL数据库开发中的一些经典代码

    1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as  2.数据库加密: ...

  2. 将*.sql数据库脚本导入到sqlserver中(sql文件导入sqlserver)

    在SqlServer中这个是用生成sql脚本生成的 要是在导入数据库用数据导入/导出向导导不进去 其实要用查询分析器来打开sql文件 然后执行就可以了

  3. SQL数据库,增加查询修改以及防sql写入攻击

    SQL添加信息 SQL查询信息 SQL修改信息 SQL语句写入攻击: 普通语句添加信息 sql写入语句攻击: 解决方法:分开传送语句与参数关键:@

  4. ASP.NET动态网站制作(15)-- SQL数据库(1)

    前言:数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,用户可以对文件中的数据进行增.删.改.查.数据库有很多种类型,从简单的存储有各种数据的表格到能都进行海量数据存储的大型数据库 ...

  5. SQL数据库的备份和恢复

    SQL数据库的备份和恢复 一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studi ...

  6. (译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机

    Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机 今早我们释出一些很棒的Windows Azure更新.这些新的提升包括:SQL数据库:支持SQL自动导出和一个新的高级层 ...

  7. 用SQL数据库做多表关联应怎样设计库结构20170527

    http://77857.blog.51cto.com/67857/143872/ 多表关联的话表之间必须得存在关系才行呢,这样建立外键约束就行了, 关系表中插入主表的主键做外键. 假设表1学生表st ...

  8. 如何将Azure SQL 数据库还原到本地数据库实例中

    原文:https://www.jerriepelser.com/blog/restore-sql-database-localdb/ 原文作者: Jerrie Pelser 译文:如何将Azure S ...

  9. 聚焦 SQL 数据库活动异地复制

    Tobias Ternstrom  US-DS-PM 首席部门项目经理 本文作为一系列业务连续性和灾难恢复文章的开篇,概述了业务连续性的各种场景,然后重点介绍 SQL 数据库高级服务级别提供的活动异地 ...

随机推荐

  1. Android 在fragment中实现返回键单击提醒 双击退出

    尝试用mvp架构加dagger2来重写了一下,大致功能都实现了,还没有全部完成. 项目地址 接近完成的时候,想在天气信息页面实现一个很常见的功能,也就是点击屏幕下方的返回键的时候不是返回到上一个act ...

  2. IP访问频率限制不能用数组循环插入多个限制条件原因分析及解决方案

    14.IP频率限制不能用数组循环插入多个限制条件原因分析及解决方案: define("RATE_LIMITING_ARR", array('3' => 3, '6' => ...

  3. [Windows Server 2008] 安装SQL SERVER 2008

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装SQL S ...

  4. UICollectionViewFlowLayout & UICollectionViewDelegateFlowLayout

    A concrete layout object that organizes items into a grid with optional header and footer views for ...

  5. S-HR之OSF

    1):getWorkDayCount ->ArrayList data = (ArrayList) com.kingdee.shr.rpts.ctrlreport.osf.OSFExecutor ...

  6. sysbench基准测试工具

    一.简介SysBench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.当前功能允许测试的系统参数有:file I/O performance (文件I ...

  7. Jenkins+Ant+Jmeter自动化集成测试实例

    通过学习Jmeter自动化测试,接触到了Ant命令和其构建文件build.xml文件的编写,与此同时,通过将测试项目集成在jenkins上,进一步学习了jenkins的一些环境配置知识.以下是自己的初 ...

  8. Linux之iptables(二、基本认识和组成)

    iptables的基本认识 Netfilter组件 内核空间,集成在linux内核中 扩展各种网络服务的结构化底层框架 内核中选取五个位置放了五个hook(勾子) function(INPUT.OUT ...

  9. App后台开发运维和架构实践学习总结(2)——RESTful API设计技巧

    前言 移动互联网时代,RESTful API成为越来越重要的移动端和服务器端交互的形式.尤其是在很多互联网公司或者传统行业拥抱移动互联网的时候,一套设计良好的Restful API能够帮助互联网产品支 ...

  10. noip模拟赛 fateice-string

    题目背景 Aldnoah ——火星上超古代文明留下的能量源,承认初代火星移民雷伊·雷加利亚博士(即后来的薇瑟帝国初代皇帝)为正统继承者,启动因子融入皇族的遗传因子中,只有皇族天生具有Aldnoah的启 ...