方法一: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'; 
  
 
  

      
  
 
 
 
  
 
 
WITH ENCRYPTION
 
 
    在AS前面可以加     
  [ WITH 
   { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
 
 
                   [ FOR REPLICATION ]

    使用 ENCRYPTION 选项创建的存储过程不能使用 sp_helptext 查看。

7、分解用逗号分的字符串

declare  @_str 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
 
  
 
   
 
 
  
 
 

   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)  
 
 
 
 
 
WHERE cCheckid LIKE ('CH'+CONVERT(CHAR(4),GETDATE(),12)+'____')

9、发现了一个SQL重要功能,通过(触发器:INSTEAD OF)来改变插入的值;

   也可以用这个功能来实现一次性输入插入多个表或更新多个表的功能。

10、计算字符串公式,返回数值

--//***********************************************************************

--//函数:Gu_GetComputeExp

--//功能:计算字符串公式,比如将 2*5+5字符串返回结果为15

--//入口参数:/*传递该函数的参数列表及相对应的说明*/

--//出口参数

--//        @_cExpression,varchar(8000)字符串

--//调用事例:/*函数在程序段中调用的实例说明*/

时间: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 这个声明可以有助于减少服务器和客户端之间的通信