月度归档:2019年06月

mssql sqlserver 使用sql脚本计算 1~20的乘积的方法分享


摘要:
今天遇到一个同学咨询,如何快速的计算1~20的乘积,下文将具体方法分享如下:
实验环境:sql server 2008 R2


实现思路:
借助系统表 master.dbo.spt_values 表和一个临时变量进行乘积运算

 declare @All int

select @All=isnull(@all,1)*number
 from master.dbo.spt_values
 where type='P'
 and number between 1 and 20
  
select @all as '1~20乘积'

mssql sqlserver引擎使用window帐户登录,出现18456错误的处理方法分享


摘要:
下文讲述sqlserver 18456异常处理方法,如下所示:
实验环境:sql server 2008 R2


18456出现异常说明:
1.未授权账户登录sql引擎的权限
2.无相应的windows账户对应

下文讲述使用windows账户无法登录的情况处理

处理办法:
利用可以连接sql引擎的账户连接至sql引擎上,然后点击”新建查询” ,
输入相应的sql脚本,如下所示:
—-1.运行脚本
create login [主机名称\账户] from windows
go
—–2.使用window账号 [主机名称\账户] 登录sql引擎

mssql sqlserver中常见优化存储过程的方法分享


摘要:
下文讲述存储过程编写的常见注意事项
实验环境:sql server 2008 R2


1.存储过程编写名称前缀注意事项

使用非sp开头的存储过程名称,避免出现同系统存储过程命名相同,导致存储过程无法执行的异常情况发生。

2.存储过程动态执行sql脚本,尽量使用sp_executesql

在存储过程中使用 sp_executesql执行sql脚本,可以使sqlserver缓存执行计划,加快sql编译速度,所以在存储过程中,我们应该尽量采用
sp_executesql替换exec动态执行脚本。


3.存储过程开头使用nocount on关键字

在存储过程开头使用 set noconut on关键字,可避免存储过程返回额外的信息,减少IO输出。


4.存储过程中表访问最好加上表Schema

在存储过程中访问表时,加上表Schema可以加快表检索,减少sql引擎访问缓存的次数,
也可避免用户无法检索到Schema时,产生的错误信息。

5.存储过程中避免使用长事务

在存储过程编写中,事务会锁定相应的表,我们尽量使每次事务短,减少锁表时间,加大存储过程对大并发的支持力度。


6.慎用游标

游标每次都会查询表,增大了对IO的访问次数,加大服务器负担,所以必须少使用游标

7.使用try catch捕捉sql错误信息

begin try 
    begin tran 
        /*sql脚本*/
    commit 
end try 
begin catch 
     /*输出错误信息*/
    rollback 
end catch