日度归档:2019年6月24日

mssql sqlserver “between and 关键字”在”日期范围”使用中注意事项说明


摘要:
下文讲述between and 关键字的使用注意事项,如下所示:
实验环境:sql server 2008 R2



between and 关键字用法说明

between and 关键字应用包含范围的数据,between and会包含左右边界的数据;
between and 关键字常用于日期、数值类型数据的范围检索。
下文着重讲述between and关键字在包含日期范围时的注意事项,如下所示:



between and 关键字注意事项


between and 日期范围注意事项1:

   create table [maomao365.com]
 (keyId int identity(1,1),
  info  varchar(30),
  writeDate datetime
  )
  go
  ----生成基础数据
  insert into [maomao365.com]
  (info,writeDate)
  values
  (N'sqlserver','2019-06-24 13:01:34'),
  (N'sql爱好者','2019-06-24 09:01:34'),
   (N'猫猫小屋','2019-06-24 23:01:34')
   go
   /* 
   between and误区一:
      日期字段会默认加入0:00:00的边界范围,
      短日期类型,在between and的应用时,会自动在日期的边界上加上时间 0:00:00 
   如下例所示:
      将不会展示出任何数据
   */ 
    
   select  * from [maomao365.com] 
   where writeDate between '2019-6-24' and '2019-6-24'
    
   ---修正方法1: 修改writeDate为短日期,然后进行between and计算
    select   * from [maomao365.com] 
       where convert(datetime,convert(varchar(20),writeDate,23))  between '2019-6-24' and '2019-6-24'
    
     
   ---修正方法2:加边界加上左右时间
     select  * from [maomao365.com] 
       where writeDate between '2019-6-24 0:00:00' and '2019-6-24 23:59:59'
      
  go
  truncate table [maomao365.com]
  drop     table [maomao365.com]

mssql sqlserver 存储过程出现“为过程或函数指定了过多的参数”错误信息的原因分析


摘要:
下文讲述sqlserver中,存储过程中的sql脚本出现”为过程或函数指定了过多的参数”错误提示信息的处理方法,如下所示:
实验环境:sql server 2008 R2

为过程或函数指定了过多的参数的原因分析:

原因1:存储过程所需的参数未指定

在调用存储过程,没有为存储过程中必填参数进行赋值,导致运行存储过程时,出现以上的错误提示信息,
解决方法:
为必须存储过程或函数指定相应的参数。

原因2: 存储过程同系统存储过程出现同步,执行的时候会调用系统存储过程

系统自带的存储过程默认以sp开头,
当我们执行一个存储过程时,首先会从master数据开始检查并执行,如果用户自定义的存储过程和系统存储过程名称相同,那么每次执行的时候,都是执行系统存储过程,
用户自定义的存储过程永远得不到执行。
解决方法:
在用户自定义存储过程时,严格使用自己的一套存储过程编码规则,避免出现自定义存储过程和系统存储过程出现同名的情况发生。

原因3:数据库调用错误

执行存储过程所在的数据库发生错误,
例:
执行的存储过程的数据库位于旧版本的系统中
解决方法:
核查执行存储过程所在的数据库的参数和sql脚本中调用的参数个数是否一致

mssql sqlserver 使用sql脚本创建自定义表类型的方法分享


摘要:
下文讲述sqlserver中,自定义表类型的方法分享,如下所示
实验环境:sqlserver 2008 R2



sqlserver表类型,可以将一张数据表作为参数发送,在sql脚本中进行使用,如下所示:


例:

    ---创建表类型

    IF TYPE_ID ('dbo.typeTableMaoMao') IS NOT NULL
      DROP TYPE dbo.typeTableMaoMao


    CREATE TYPE dbo.typeTableMaoMao AS TABLE
    (
     [keyId]  int,  
     info1    varchar(30),
     info2    varchar(30)
    )
    go
  

举例:使用表类型typeTableMaoMao的sql脚本举例

      
    DECLARE @t  typeTableMaoMao 
    
     insert into  @t
     (keyId,info1,info2)
     values
     (1,N'sqlserver',N'sql爱好者')


     insert into  @t
     (keyId,info1,info2)
     values
     (2,N'说明',N'猫猫小屋')

       
     SELECT * FROM @t