这样的SQL SERVER存储过程该怎么写

create PROCEDURE [dbo].[bb_sx_sclr]
@KSRQ varchar(20), --开始时间
@JSRQ varchar(20) --结束时间
as
begin
create table t_sclr( --建一张空表,将数据传进去
月份 datetime
)
--补 时分秒,实现12月份查询是从12-01到12-31
if LEN(@KSRQ)<11
set @KSRQ=@KSRQ+' 00:00:00'

--补 时分秒,实现12月份查询是从12-01到12-31
if LEN(@JSRQ)<11
set @JSRQ=@JSRQ+' 23:59:59'

要得到这样的报表(按照传入的两个参数,显示时间段的年月值)
月份
-2014-01
2014-02

2个回答

图片说明

CREATE PROCEDURE DBO.BB_SX_SCLR(@KSRQ VARCHAR(20),@JSRQ VARCHAR(20)) AS
BEGIN
DECLARE @DATE_S DATETIME,@DATE_E DATETIME --定义时间格式的日期变量
DECLARE @DATE_TMP DATETIME --交换日期用的临时变量
BEGIN TRY --开始校验输入是否合法
SET @DATE_S =CONVERT(DATETIME,@KSRQ) --转换输入的字符串日期到时间格式的变量
SET @DATE_E =CONVERT(DATETIME,@JSRQ) --转换输入的字符串日期到时间格式的变量
IF @DATE_S>@DATE_E --如果开始日期大于结束日期,则交换,允许用户输入日期大小相反
BEGIN
SET @DATE_TMP=@DATE_S
SET @DATE_S=@DATE_E
SET @DATE_E=@DATE_TMP
END
END TRY
BEGIN CATCH --错误处理,校验不通过则输出'0000-00'
SELECT '0000-00' LIST
RETURN
END CATCH

DECLARE @CHAR_MONTH VARCHAR(3)                  --定义月份的字符串临时变量
CREATE TABLE #TMP_BB_SX_SCLR(LIST VARCHAR(7))   --定义存储输出数据的临时表

WHILE (DATEPART(YYYY,@DATE_S)*12+DATEPART(MM,@DATE_S)<=DATEPART(YYYY,@DATE_E)*12+DATEPART(MM,@DATE_E))
                                                --比较条件:当前年份*12<=目标年和月份则继续
BEGIN
    SET @CHAR_MONTH=CONVERT(VARCHAR(2),DATEPART(MM,@DATE_S))        --转换当前月份的数据类型到字符串
    SET @CHAR_MONTH='0'+@CHAR_MONTH                                 --在月份前加“0”
    SET @CHAR_MONTH=SUBSTRING(@CHAR_MONTH,LEN(@CHAR_MONTH)-2+1,2)   --截取最后两位确保月份为1和2的时候其显示为01和02

    INSERT INTO #TMP_BB_SX_SCLR(LIST) VALUES(CONVERT(VARCHAR(4),DATEPART(YYYY,@DATE_S))+'-'+@CHAR_MONTH)
    SET @DATE_S=DATEADD(MM,1,@DATE_S)                               --当前月份+1
END
SELECT LIST FROM #TMP_BB_SX_SCLR ORDER BY LIST ASC                  --按照先后顺序返回需要的结果列表
DROP TABLE #TMP_BB_SX_SCLR

END

EXEC BB_SX_SCLR '2017-12-01','2019-2-1'
EXEC BB_SX_SCLR '2019-2-1','2017-12-01'

输出结果如下:
2017-12
2018-01
2018-02
2018-03
2018-04
2018-05
2018-06
2018-07
2018-08
2018-09
2018-10
2018-11
2018-12
2019-01
2019-02

qq_39372401
qq_39372401 谢谢大哥了,可以用
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SQL server之存储过程练习
 对应于student数据库(1)  创建一个无参存储过程StuScoreInfo,查询以下信息:学号,姓名,性别,课程名称,考试成绩.use Studentgocreate proc StuScoreInfoas select student.sno,sname,ssex,cname,sc.gradefrom student,course,sc wherestudent.sno=sc.sno ...
如何在sqlserver中写存储过程
original link http://www.codeproject.com/Articles/126898/Sql-Server-How-to-write-a-Stored-procedure-in-Sql 存储过程在sqlserver 中被定义成一组有逻辑关系的sql语句 ,他们实现了一些特定的任务。使用存储过程有很多好处。最主要的优点是提高数据库性能。 还有如下好处
用SQL Server编写一个存储过程
今天数据库上机要求编写一个存储过程来体会sql server的可编程性。题目如下: 数据库中有一张表 student, 有两列分别是xh varchar(10), xm varchar(50),xh是主码。 现在要求编写一个存储过程,传入两个用分号分隔的字符串(如xhStr=’01;02;03;04’, xmStr=’张三;李斯;王五;赵六’, 其中字符串的长度不限,里面的分号数目也不限,由用
sql 存储过程 入门级 练习
sql 存储过程 入门级
SQL存储过程测试——创建测试用例以及测试结果存储
问题如何创建SQL数据库以及表结构以用来保存测试用例的输入数据和测试结果。设计编写T-SQL脚本,创建一个数据库然后创建一些表用来保存测试用例的输入数据和测试结果。如果想通过SQL认证的方式连接到上一步创建的数据库,请创建一个专用的SQL登录账号。然后在查询分析器里或者通过osql.exe运行T-SQL脚本。方案--makeDbTestCasesAndResults.sqluse ma
SQL中存储过程和函数的标准写法
之前一直用的存储过程,今天忽然又接触到跑算法获取返回值的问题,想到可以用函数,好久没用过一时忘了怎么写,还要现查,于是就记录下来,顺便连存储过程一块啦。 存储过程: CREATE PROC dbo.存储名 { @参数1 varchar(30)='', @参数2 数据类型=‘’ } AS BEGIN 吧啦吧啦一堆写法 比如声明个变量 DECLARE @变量名 数据类型
在SQL server中如何写存储过程
前言: 刚换了工作,之前使用的数据库是Oracle,现在用的是SQL server。有时候语法和写SQL语句各种不习惯。 总结一下SQL server中如何存储。 USE [SSQADM]   ----Use 是跳转到哪个数据库,对这个数据库进行操作。 GO        ----GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号,相当于提交上面的SQL...
sqlserver存储过程循环写法
用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 ================== DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE CURSOR YOUCURNAME FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME
在JDBC中调用SQL Server中的存储过程时出现异常:该语句没有返回结果集。
com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集。            at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.Java:171)            at com.microsof
jdbc调用sqlserver存储过程无返回结果集处理办法
dbc调用sqlserver的存储过程时,提示无返回结果集,可以通过在该存储过程中begin后加入set nocount on,就可以读到。 由于这里出现该问题的存储过程过多,而且不属于自己维护,因此,通过写一个代理存储过程,同样加上set nocount on即可读到。 [sql] view plain copy   
分页-存储过程5种写法 sqlserver分页
分页-存储过程5种写法 sqlserver分页
jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
在JDBC中调用SQL Server中的存储过程时出现如下异常:  com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集。            at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServer
sql server 2008 存储过程排序记录
最近在项目开发中遇到一个
用SQL Server数据库实现增删改查和存储过程
用SQLSER
sqllog 中存储过程写方法
DELIMITER // CREATE PROCEDURE pro12()      BEGIN         SELECT*FROM student     END ; END// DELIMITER ; CALL pro12();//执行存储过程
Sql Server 给表添加合计并统计金额的存储过程!(源代码分享)
USE [life] GO /****** 对象: StoredProcedure [dbo].[类_表添加合计] 脚本日期: 06/09/2012 09:33:16 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- <> -- -- -- --
存储过程与用户自定义函数(SQL SERVER)
二者本质上没有什么区别。当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
Sql Server存储过程之验证登录实例
说明: 存储过程可以防止SQL注入漏洞的威胁,也会很安全。该存储过程包含输入参数和输出参数,输入参数有用户ID和密码,返回值表示出不同的结果。 ALTER PROCEDURE [dbo].[Logining]( @in_id varchar(10), @in_password varchar(10), @out_parameter varchar(10) output ) /**
sqlserver存储过程学习(通俗易懂)
sqlserver存储过程学习(通俗易懂)
sql server存储过程的条件判断和事务管理
       通过sql server存储过程周期性地根据条件字段值设置其他字段,包括条件判断和事务管理。实例语句如下。      数据库表(vipPoint)定义语句如下:CREATE TABLE [dbo].[vipPoint] (    [userCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,    [point
Sqlserver中存储过程和游标的一些使用例子
/*带输入输出参数存储过程*/ ALTER PROCEDURE pro_test2 @userID INT, @maxUserID INT OUTPUT, @countUser INT OUTPUT AS BEGIN SELECT * FROM dbo.SY_ADMIN WHERE UserID=@userID --10075 SELECT @maxUser
关于MyBatis中insert返回值与SQLserver触发器/存储过程返回执行结果的问题
SQLserver触发器和Mybatis的Mapper有冲突
sqlserver用户更新存储过程
exec sp_change_users_login  "update_one","cc_dbo","cc_dbo";
sqlServer分页存储过程的调用
现象: sqlServer的分页一直相对比较复杂。这里使用存储过程实现分页逻辑解决办法 1:action获取查询的条件,初始化每页显示的大小,page代表当前查看第几页,默认设置为第一页。rows表示每页显示的大小。sort代表查询按什么字段排序 如果要按多个字段就写:sort=“tcode,name” 中间用,分割 order代表按什么方式排序,和sort一样多个使用,分割!word代表查询
SQL server 2012 中存储过程调试
1、存储过程无法直接调试选中要调试的存储过程,右击“执行存储过程”,根据是否需要输入参数,若需要则可以先随便输入,跳转到Exec 页面后,输入正确合理的参数进行,F10,开始调试,F11,进入到被调用的存储过程中。结论:无法很好的与C#客户端程序联合起来调试,是存储过程的一大缺点。所以存储过程尽量留给无需客户输入较多参数而能进行数据处理的一个过程。...
SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
本文出处: http://www.cnblogs.com/wy123/p/5958047.html    最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一个简单的查询存储过程为例,简单说一下各种写法的区别,以及该用那种写法 专业DBA以及熟悉数据库的同学请无视。   废话不多
导出sql server表数据(以insert语句方式的存储过程)
导出sql server表数据(生成以insert插入的语句方式的存储过程)
在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
在项目开发中如果有时修改了一个存储过程,但是如何能够快速的查找到使用了这个存储过程的其它存储过程呢?这个问题 对于规模稍微大些的项目而言,显得尤其重要了,数据库中如果有几百个存储过程,难道还一个个找不成,即使自己很了解业务 和系统,时间长了,也难免能记得住。如何使用SQL语句进行查询呢? 下面就和大家分享下SQL查询的方法: select distinct name from sysc
C#与SQL Server存储过程之一(创建):使用C#创建SQL Server的存储过程
 通常,开发人员使用的是T-SQL来创建SQL Server的存储过程、函数和触发器。 而现在的SQL Server 2005已经完全支持.NET通用语言运行时(CLR)了。 这就意味着,你可以使用.NET的语言,如C#、VB.NET之类的来开发SQL Server的存储过程、函数和触发器。 SQL Server 和 CLR 的集成给我们带来了n多好处,如实时编译、类型安全、增强的安全性以及增
SQL存储过程生成一个指定长度的随机字符串
if exists(select name from sysobjects where name='xsGetRandChar') drop proc xsGetRandChar go -- ============================================= -- Author: yzb -- Create date: 20140120 -- Description:
sql编程 && 存储过程
sql  结构化查询语言      是一种编程语言   用于管理数据库的编程语言      元素:     数据     数据类型         变量的数据类型  就是字段的数据类型      变量     字段名就是变量       自定义变量          为了区分用户变量和系统变量 需要在用户变量前增加 @ 标志     set  变
SQLServer存储过程实现数据插入和更新
存储过程的功能非常强大,在某种程度上甚至可以替代业务逻辑层,接下来就一个小例子来说明,用存储过程插入或更新语句。1、数据库表结构    所用数据库为Sql Server2008。2、创建存储过程(1)实现功能:1)有相同的数据,直接返回(返回值:0);       2)有主键相同,但是数据不同的数据,进行更新处理(返回值:2);       3)没有数据,进行插入数据处理(返回值:1)。    根...
sqlserver 链接服务器在存储过程中调用的设置
如下代码: exec   sp_addlinkedserver     'srv_lnk','','sqloledb','135.251.32.158'   exec   sp_addlinkedsrvlogin   'srv_lnk',false,null,'AMIISPDM','asb!2345' select qualno,amk,b.apn,b.mpn from srv_lnk.C
sqlserver存储过程入门
SQLSERVER存储过程基本语法复制代码 一、定义变量 –简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user1='张三' print @user1 declare @user2 nvarchar(50) select @user2 = Name fr
sql server 创建存储过程
首先先把我困惑的地方放到前面,后面在详细讲一下过程。在 “对象资源管理器”中,连接到 数据库引擎 的实例,然后展开该实例。依次展开 “数据库”---》 “可编程性”。右键单击“存储过程”,再单击“新建存储过程”将会创建存储过程模板:让我困惑的 &amp;lt;Procedure_Name, sysname, ProcedureName&amp;gt;   有什么用?搜遍全网 也没答案。。。。上图其实是一个存储过程...
存储过程的基本操作(SQL Server Management Studio)
最近在用VS2008+Sql server 2005做开发,要用到以前没有做过的存储过程,找了些关于存储过程的基本操作,留档以备使用。 创建存储过程 在对象资源管理器中,连接到 SQL Server 2005 数据库引擎实例,再展开该实例。 展开
sql server 2008 红色波浪线提示找不到存储过程,但是执行成功
今天在sql server 里新建了几个存储过程,每次都是建了之后,存储过程是可以看见的,但用exec语句的时候,却一直有红色波浪线提示找不到存储过程,但是直接执行,却又是可以执行成功的,很奇怪,每次都需要重新打开ssms,红色 的波浪线提示才会取消!看到百度知道上有一个很好的解释是: 原因是这样的.你的SQL Server 客户端, 在连接到 SQL Server 数据库以后。会自动读取 数据
基于sqlserver的常用查询、视图、触发器、存储过程用法
查询中消除重复的行 where子句后面常跟的查询条件 下面是上述的例子 order by子句 聚集函数 group by子句 having 两表等值连接查询 两表自身连接 tip 外连接 多表连接 嵌套查询可以多层嵌套 不相关子查询 相关查询 带有anysomeall谓词子查询 带谓词Exists的子查询 集合查询 基于派生表的查询首先在这申明,sqlserver是不区分大小写的。查询中消除重复的行
Sqlserver存储过程中经常使用的循环
1:游标的使用: SQL Server游标的使用【转】 http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html declare @date2 datetime declare tabB_cursor cursor for   select date,weekNum,studyTime  from @tab
SQL server 存储过程的编写
USE [数据库名称] GO /****** Object:  StoredProcedure [dbo].[insertbGait]    Script Date: 2018/7/17 15:51:22 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ====================================...
SqlServer-IN写法(普通、存储过程)
创建一张表,然后往里面添加三笔数据 CREATE TABLE Table_GuidTestIn (     Guid  UNIQUEIDENTIFIER PRIMARY KEY,     name NVARCHAR(50)not null ) insert into Table_GuidTestIn(Guid,name)values(NEWID(),'111') insert i...
SQL SERVER 存储过程和自定义函数
一、功能描述。 需要把 participants 转换成中文显示,相关信息的表如下: 二、自定义函数,作用是解释用 ;分割的参与者编号,如下: USE [schedule] GO /****** Object:  UserDefinedFunction [dbo].[SplitStrFun]    Script Date: 02/22/2017 15:49:4
给SQL Server存储过程,传送数组参数(多个参数)的变通办法
最近在做开发过程中碰到这么一个纠结的问题,需要同时插入N条数据,不想在程序里控制,但是SQL Sever又不支持数组参数.所以只能用变通的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"3500320083208#3500600520890#3500741122924#3500790143280#3501010510869#3500741129750", 然后在存储过程中用S
SQLserver 存储过程执行错误记录到表
对于在执行存储过程中碰到的一些错误,如果未及时捕获或者说传递给前端应用程序来,在这样的情形下,故障的排查显得尤为困难。基于此,我们可以可以将这些错误信息记录到日志,同时也可以将其传递给前端应用程序。如本文的示例。 一、将错误信息记录到表CREATE TABLE ErrorLog ( ID INT IDENTITY (1,1) NOT NULL,
通用的可带查询条件的SQL语句的分页存储过程(2)
代码二: CREATE PROCEDURE pagination @tblName varchar(255), – 表名 @strGetFields varchar(1000) = ‘*’, – 需要返回的列 @fldName varchar(255)=”, – 排序的字段名 @PageSize int = 10, – 页尺寸 @PageIndex int = 1,
sql server 带输入输出参数的分页存储过程(效率最高)
create procedure proc_page_withtopmax ( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int output,--总页数,输出参数 @totalCount int output--总条数 ) as begin set nocount on; declare @sql nvarc
Sql Server的存储过程与Java代码相连接调用(一)
我所写的项目是使用Maven开发,在pom.xml中添加如下必要依赖:           添加com.microsoft.sqlserver的mssql-jdbc 6.2.1.jre8的依赖 com.microsoft.sqlserver mssql-jdbc 6.2.1.jre8            Java后台代码如下代码块所示。其中,代码中所调用的 pr
SQL server使用存储过程读取txt文件
--创建存储过程 create procedure read_txt_file @filename nvarchar(100) AS exec(' bulk insert tablename from ' + @filename + ' WITH ( FIELDTERMINATOR = '','',--列分割符 ROWTER
SqlServer中视图、存储过程、事务的使用。
前言 正文 视图-VIEW VIEW介绍 VIEW使用 存储过程-SP 介绍 使用 事务-Transaction Transaction介绍 使用 Transaction种类 总结 如有错误请指教提前致谢前言熟悉SqlServer中视图、存储过程、事务的使用会在操作数据时带来更大的方便。正文视图-VIEWVIEW介绍 定义: 视图(VIEW)虚拟表,一般是不存储数据的,但是Sqlserver的索
无意中发现的sql server 存储过程加密破解方法
存储过程是数据库中一个非常重要的该部分,很多业务逻辑都可能写在存储过程里面,为了安全,部分存储过程是加密存放的,如果我们想看到源代码,就非常困难了,在sql  server 2000中,有专门的方法破解,但sql server 2005版本以后,要看到加密的存储过程源代码就困难了.       为提高开发效率,我安装了sql prompt插件,目的是提高开发效率,比如自动代码提醒/代码补全等,非
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问