SQL存储过程触发器语句汇总

来源:互联网 发布:地府淘宝商txt下载八零 编辑:程序博客网 时间:2024/05/17 22:14
 1、取表中数据保存到变量
     方法一:set 变量=(select 字段 from 表  where )    注:select语句必须加().
     方法二:select 变量1=字段1,变量2=字段2,... from  表 where .

2、变量赋值
    错误:set @Dsp1='1',@Dsp2='2'
    正确:select @Dsp3='3',@Dsp4='4'

3、数据类型转换
    时间类型转字符:convert(varchar(8),getdate(),108)    --12:12:34
                             convert(varchar(10),dBrushDT,112)   --20120819
                             convert(varchar(19),GETDATE(),120)   --2012-09-21 19:44:11

    数字类型转字符:cast(数字 as varchar(10))
    字符转数字:cast('3.34' as decimal(9,1))
4、NUll值判断
    变量判断:IF @变量 is null or @变量=0
    SQL语句:WHERE COLUMN_NAME IS NULL
    ISNULL函数:ISNULL(变量/字段,'为空的时默认值')

5、两个字符串时间之间的差
     DATEDIFF(ss, convert(datetime,'2012-09-21 01:26:50',120), convert(datetime,'2012-09-21 01:27:54',120))
    
     以10分钟为单位时间取整
DATEADD(mi,DATEDIFF(mi,convert(datetime,convert(varchar(10),getdate(),120),120),getdate())/10*10,convert(datetime,convert(varchar(10),getdate(),120),120))
时间转换
SELECT 
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' 
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 
        'smalldatetime' 
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' 
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 
        'datetime2'
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 
        'datetimeoffset';
 

6、存储过程加密 WITH ENCRYPTION
    在AS前面可以加    [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
                   [ FOR REPLICATION ]
    使用 ENCRYPTION 选项创建的存储过程不能使用 sp_helptext 查看。

7、分解用逗号分的字符串
    declare  @_str varchar(100),
 @_i int,
 @_a varchar(100)
    set @_str=',,,abc,de fg, , ,,hijklmn'+',,,,'
    set @_i=CHARINDEX(',',@_str)
    while @_i=1 --删除前面重复的','
    begin
set @_str=right(@_str,len(@_str) -1)
set @_i=CHARINDEX(',',@_str)
    end
    while @_i>0
    begin
set @_a=left(@_str,@_i -1)
--编写程序
if @_a<>''
select @_a
set @_str=right(@_str,len(@_str)-@_i)
set @_i=charindex(',',@_str)
while @_i=1  --删除后面重复的','
begin 
set @_str=right(@_str,len(@_str) -1)
set @_i=CHARINDEX(',',@_str)
end
    end

 8、取表记录关键字段最大值的方法:(陈斌写)

select ('N0002' + right(convert(varchar(10),year(getdate())),2)
                   + convert(varchar,month(getdate())) 
                   +right(convert(varchar,getdate(),111),2))+right('0000'+convert(varchar(4),(substring(isnull(max(ordno),0),12,4)+ 1)),4) as ordno1
from mps_mfg_ord 
where ordno like ('N0002' + right(convert(varchar(10),year(getdate())),2)
                   + convert(varchar,month(getdate())) 
                   +right(convert(varchar,getdate(),111),2)) +'____'

简化版:SET @_cCheckID=(SELECT 'CH'+CONVERT(CHAR(4),GETDATE(),12)+RIGHT(('0000'+CONVERT(VARCHAR(4),RIGHT(ISNULL(MAX(cCheckid),0),4)+1)),4) 
 FROM  gs_procheck_mst
WHERE cCheckid LIKE ('CH'+CONVERT(CHAR(4),GETDATE(),12)+'____')
     )
9、发现了一个SQL重要功能,通过(触发器:INSTEAD OF)来改变插入的值;
   也可以用这个功能来实现一次性输入插入多个表或更新多个表的功能。


10、计算字符串公式,返回数值
--//***********************************************************************
--//函数:Gu_GetComputeExp
--//功能:计算字符串公式,比如将 2*5+5字符串返回结果为15
--//入口参数:/*传递该函数的参数列表及相对应的说明*/
--//出口参数
--//        @_cExpression,varchar(8000)字符串
--// @_nValue,dec(18,6),返回计算值
--// 返回:integer
--//调用事例:/*函数在程序段中调用的实例说明*/
--//作者:Chunlei Gu时间:2008/12/27;修改:*** 时间:
--/***********************************************************************
CREATE PROCEDURE [Gu_GetComputeExp] 
@_cExpression varchar(8000),
@_nVaule dec(18,6) out
WITH ENCRYPTION
AS
DECLARE  @_DySQLl nvarchar(4000)
BEGIN
SET  @_DySQLl = N'set @_nVaule = ' + @_cExpression
EXEC SP_EXECUTESQL @_DySQLl ,N'@_nVaule decimal(18,6) out', @_nVaule out
END

11、数据库恢复
restore database NGBaBei from disk='D:\3.NGGS项目\2.项目开发\Gerp_BaBei\database\090107nbbabei' with replace

restore database NG0001 from disk='D:\3.NGGS项目\8.安装文件\ng00010116\ng00010116' with replace

12、提高SQL性能:
WITH RECOMPILE 每次执行都进行编译
SET NOCOUNT ON 这个声明可以有助于减少服务器和客户端之间的通信    

原创粉丝点击