标签归档:存储过程

mssql sqlserver 最简单的存储过程的写法分享


摘要:
下文分享存储过程的最简单的实例分享,如下所示:
实验环境:sql server 2008 R2


---例:建立一个无参数输入的存储过程,查询指定表,如下所示 
CREATE PROCEDURE [存储过程名称]
AS
BEGIN
        Set XACT_ABORT ON; ---开启事务自动回滚功能
	SET NOCOUNT ON;     ---取消计数功能
        Begin  Tran
             select   [列名1],[列名2],[列名3]  ...from  [数据库表名]
        Commit Tran
END
GO

mssql sqlserver 自动备份存储过程的方法分享


摘要:
为了更好的记录数据库中存储过程脚本的变化情况,下文采用数据库触发器来自动记载每次“存储过程”的变化(新增或修改),如下所示:
实验环境:sql server 2008 R2


处理方法:
1 .master数据库下建立数据表:
procBackTableInfo,包含列

    CREATE TABLE [procBackTableInfo](
    [keyId [int] IDENTITY(1,1) NOT NULL PRIMARY KEY ,--编号
    [dbName]  sysname,--数据库名
    [procSqlInfo] [ntext] NOT NULL,--存储过程的SQL
    [ProcName]  sysname,--存储过程名字
    [writeDate] [datetime] default getdate(),--修改时间
    [writeUser] sysname   null --写入人
  )
   

2. 建立数据库触发器,tr_procChange

   create trigger [tr_procChange]
on all server  
for CREATE_PROCEDURE,ALTER_PROCEDURE

as 
  --获取事件数据
  DECLARE @data XML
  SET @data = EVENTDATA()

  declare @dbName sysname
  declare @procName sysname
  declare @procSqlInfo nvarchar(max)

  --获取新建存储过程的数据库名
  SET @dbName = @data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'sysname')
  --存储过程的名字
  set @procName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')
  --获取新建存储过程的内容
  set @procSqlInfo = @data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'sysname')

  --将数据库名、存储过程名以及存储过程内容插入ProcSqlTable表
  insert into [master].[dbo].[procBackTableInfo]([dbName],[ProcName],[ProcSQL]) 
  values(@dbName,@procName,@procSqlInfo)

GO

ENABLE TRIGGER [tr_procChange] ON ALL SERVER

  

mssql sqlserver 调试存储过程的方法分享


摘要:
下文讲述sqlserver中使用print调试存储过程的方法分享


对于超长的存储过程,我们可以在存储过程指定位置放入
print 打印变量信息,输出指定变量的值,
通过print 打印出的值判断出此处的执行是否合理及脚本出错的位置,方便对存储过程进行调试,如下所示:

   例:调试存储过程pr_test
   ---1.建立测试存储过程
   create proc pr_test 
   as 
   begin
     declare @a int 
    set @a = 1 
     print '行号1:'
     print 'a:'+convert(varchar(20),@a )
    set @a = 2/0 
     print '行号2:'
     print 'a:'+convert(varchar(20),@a )
     end 

  ---2 运行存储过程,打印相关变量观察输出数值是否合理
   exec pr_test 
    ---通过运行以上存储过程,我们可以观察出:
     2.1 存储过程运行报错
     2.2 存储过程运行中,在消息窗中,输出 
       行号1:
       a:1
      然后报相关错误信息:
    从以上返回信息 ,我们可以看出sql脚本在第二个print输出后,运行报错,从以上错误信息我们可以快速查找出sql脚本出错的位置,然后进行相关的修改和调整达到调试sql存储过程的目的