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. 《Java编程的逻辑》第二部分 面向对象

  2. 脚本添加删除nginx配置中的内容

    [root@nodejs script]# more editnginx.sh #!/bin/bash # function back_check(){ # 备份配置和覆盖配置文件 cp -rf /e ...

  3. 为什么阿里规约手册要求谨慎使用Arrays.asList方法

    前言 在开发中,有时候会碰到把多个参数,或者说把数组转成List的需求,通常我们会使用 Arrays.asList()方法.但是该方法在使用的过程中,稍有不慎就会出现严重的异常.有如下代码: @Tes ...

  4. iic通讯 FPGA实现 mpu6050为例

    IIC最常用的通讯协议,但普遍用于单片机.arm这些,用FPGA实现大材小用,但对于菜鸡水平练练手很不错,考验串并转换和时序的控制.今天我就以mpu6050陀螺仪为例,实现FPGA的iic通信. 1. ...

  5. Windows下Unity安装

    安装教程: https://www.paws3d.com/lesson/us-0101/ 问题1: 安装并完成注册后,在网页上能登录,但打开Unity时不能启动成功,一直停留在如下界面 解决方案:断网 ...

  6. 学生成绩管理系统C(链表)语言

    #include"stdio.h" #include"stdlib.h" #include"string.h" //用于调用一些函数 str ...

  7. Django REST framework 自定义(认证、权限、访问频率)组件

    本篇随笔在 "Django REST framework 初识" 基础上扩展 一.认证组件 # models.py class Account(models.Model): &qu ...

  8. 从零开始的 webpack4 + vue2.x

    新建文件夹 webpack-vue 安装依赖 yarn init //初始化package.json yarn add webpack webpack-cli //添加webpack.webpack- ...

  9. 第七节:numpy之矩阵及特殊矩阵的创建

  10. python爬虫数据解析的四种不同选择器Xpath,Beautiful Soup,pyquery,re

    这里主要是做一个关于数据爬取以后的数据解析功能的整合,方便查阅,以防混淆 主要讲到的技术有Xpath,BeautifulSoup,PyQuery,re(正则) 首先举出两个作示例的代码,方便后面举例 ...