/*带输入输出参数存储过程*/
ALTER PROCEDURE pro_test2
@userID INT,
@maxUserID INT OUTPUT,
@countUser INT OUTPUT
AS
BEGIN
SELECT * FROM dbo.SY_ADMIN WHERE UserID=@userID --10075
SELECT @maxUserID=10089
SET @countUser=20000
END;
GO /*测试*/
DECLARE @maxUserID INT,@countUser INT
EXECUTE pro_test2 10075,@maxUserID OUTPUT,@countUser OUTPUT
SELECT a=@countUser, b=@maxUserID /*带输入输出参数 0登录成功 1密码错误 2用户名错误*/
ALTER PROC proc_test3
@UserName VARCHAR(50),
@UserPwd VARCHAR(50),
@Result INT OUT
AS
BEGIN
IF @UserName = 'admin'
BEGIN
IF @UserPwd = '111'
SET @Result = 0
ELSE
SET @Result = 1
END;
ELSE
SET @Result = 2
END /*测试*/
DECLARE @Result INT
EXECUTE proc_test3 'hystu1', '111',@Result OUT
SELECT a= @Result /*游标使用例子*/
--声明2个变量
DECLARE @D_Id NVARCHAR(MAX);
DECLARE @D_Name NVARCHAR(MAX);
DECLARE @D_Password NVARCHAR(MAX);
--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
DECLARE mycursor CURSOR
FOR
SELECT D_Id ,
D_Name,
D_Password
FROM dbo.TestTable;
--打开游标
OPEN mycursor;
--从游标里取出数据赋值到我们刚才声明的2个变量中
FETCH NEXT FROM mycursor INTO @D_Id, @D_Name, @D_Password;
--判断游标的状态
-- 0 fetch语句成功
---1 fetch语句失败或此行不在结果集中
---2 被提取的行不存在
WHILE ( @@fetch_status = 0 )
BEGIN
--显示出我们每次用游标取出的值
print (@D_Id+'--------'+@D_Name+'--------'+@D_Password)
--用游标去取下一条记录
FETCH NEXT FROM mycursor INTO @D_Id, @D_Name, @D_Password;
END;
--关闭游标
CLOSE mycursor;
--撤销游标
DEALLOCATE mycursor;
/*
SQL游标的优点是可以方便从一个结果集中进行循环遍历数据在进行操作。
1、游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,
而不是一次对整个结果集进行同一种操作;
2、它还提供对基于游标位置而对表中数据进行删除或更新的能力;
3、游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,
使两个数据处理方式能够进行沟通。
然而游标也有缺点——复杂和低效,是游标的最大缺点,也是致使很多时候在使用存储过程中没有使用游标的主要原因。
*/
--将book表中的LookCount(int型)字段加上800-1000的随机整数
DECLARE @bid INT;
DECLARE cur CURSOR READ_ONLY
FOR
SELECT bid
FROM Book;
OPEN cur;
FETCH NEXT FROM cur INTO @bid;
WHILE ( @@fetch_status = 0 )
BEGIN
UPDATE dbo.Book
SET LookCount = LookCount + CAST(( RAND() * ( 1000 - 800 ) + 800 ) AS INT)
WHERE bid = @bid;
FETCH NEXT FROM cur INTO @bid;
END;
CLOSE cur;
DEALLOCATE cur;
--声明3个变量
DECLARE @D_Id NVARCHAR(MAX);
DECLARE @D_Name NVARCHAR(MAX);
DECLARE @D_Password NVARCHAR(MAX);
create table #tmp (id NVARCHAR(MAX),name NVARCHAR(MAX),pwd NVARCHAR(MAX)) --建立临时数据表
--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
DECLARE mycursor CURSOR
FOR
SELECT D_Id ,
D_Name,
D_Password
FROM dbo.TestTable;
--打开游标
OPEN mycursor;
--从游标里取出数据赋值到我们刚才声明的3个变量中
FETCH NEXT FROM mycursor INTO @D_Id, @D_Name, @D_Password;
--判断游标的状态
-- 0 fetch语句成功
---1 fetch语句失败或此行不在结果集中
---2 被提取的行不存在
WHILE ( @@fetch_status = 0 )
BEGIN
--显示出我们每次用游标取出的值
--print (@D_Id+'--------'+@D_Name+'--------'+@D_Password)
INSERT INTO #tmp(id,name,pwd) VALUES(@D_Id,@D_Name,@D_Password)
--用游标去取下一条记录
FETCH NEXT FROM mycursor INTO @D_Id, @D_Name, @D_Password;
END;
--关闭游标
CLOSE mycursor;
--撤销游标
DEALLOCATE mycursor;
SELECT * FROM #tmp; --查询结果
DROP TABLE #tmp --删除临时表

USE [JianKu]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[pro_GetProductSale]
@BeginDate NVARCHAR(20),
@EndDate NVARCHAR(20),
@PageIndex INT,
@PageSize INT,
@Keyword NVARCHAR(50)
AS
DECLARE @PageSql NVARCHAR(MAX)
DECLARE @Sql NVARCHAR(MAX)
DECLARE @Where NVARCHAR(200)
DECLARE @WhereEnd NVARCHAR(200)
DECLARE @CountSql NVARCHAR(MAX)
SET @Where=''
SET @WhereEnd=''
IF ISNULL(@BeginDate, '') <>''
BEGIN
SET @Where += ' AND k.PayDate >='''+ @BeginDate + ''''
END
IF ISNULL(@EndDate, '') <>''
BEGIN
SET @Where += ' AND k.PayDate <='''+ @EndDate + ''''
END
IF ISNULL(@Keyword, '') <>''
BEGIN
SET @WhereEnd += ' AND (b.Name like ''%'+ @Keyword + '%''
OR c.Name like ''%'+ @Keyword + '%''
OR d.Name like ''%'+ @Keyword + '%''
OR a.Part like ''%'+ @Keyword + '%''
OR a.GoodsName like ''%'+ @Keyword + '%'')
'
END
SET @Sql='
SELECT a.*,b.Name AS CategoryName,c.Name AS BrandName,d.Name AS ModelName,
t.SumSaleCount,t.SumSaleAmount
FROM dbo.Goods a
LEFT JOIN dbo.GoodsPlatType b ON a.PlatId=b.Id
LEFT JOIN dbo.GoodsBrand c ON a.BrandId=c.Id
LEFT JOIN dbo.GoodsModel d ON a.ModelId=d.Id
LEFT JOIN
(
SELECT TOP 1 g.GoodsId, SUM(g.GoodsIdNum) AS SumSaleCount,SUM(g.GoodsIdNum*g.GoodsPrice) AS SumSaleAmount
FROM dbo.GoodsOrderDetails g INNER JOIN dbo.GoodsOrder k ON g.OrderId=k.Id
AND k.Statuc=100 ' + @Where + '
GROUP BY g.GoodsId
) as t ON a.Id=t.GoodsId
WHERE a.IsDelete=1 ' + @WhereEnd
SET @CountSql='SELECT count(1) as TotalRecord FROM (' + @Sql + ') as tp'
SET @PageSql='SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY Id) AS ROWID,
* FROM ('+@Sql+') as tpp ) AS t WHERE ROWID BETWEEN '
+ CAST((@PageIndex - 1) * @PageSize + 1 AS NVARCHAR(20))
+' AND '+ CAST(@PageIndex * @PageSize AS NVARCHAR(20))
PRINT @PageSql
EXEC(@PageSql)
EXEC(@CountSql) --EXEC pro_GetProductSale @BeginDate='',@EndDate='',@PageIndex=2,@PageSize=10,@Keyword='小米'

Sqlserver中存储过程和游标的一些使用例子的更多相关文章

  1. Sqlserver中存储过程,触发器,自定义函数(一)

    Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...

  2. SQLServer 中存储过程

    SQLServer 中存储过程返回的三种方式( 包括存储过程的创建, 在存储过程中调用, 在VS中调用的方法)存储过程有三种返回:   1.   用return返回数字型数据   2.   用返回参数 ...

  3. Sqlserver中存储过程,触发器,自定义函数(二)

    Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...

  4. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  5. SqlServer中存储过程中将Exec的执行结果赋值给变量输出

    原文 SqlServer中存储过程中将Exec的执行结果赋值给变量输出 背景: 遇到这样一种情况:动态向存储过程中传入表名和表的某些属性(这里用到的是主键ID),然后利用这两个变量查出一条数据的某些字 ...

  6. SqlServer中存储过程 returnC#代码处理以及对应的MySQL如何改写

    一.SqlServer 中 1. 创建表 create table testuser( id int, --primary key, names ), address ), paw ) ) 2.创建存 ...

  7. sqlserver 中存储过程的基础知识记录

    1.什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令. 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句. 2.为什么要用存储过程? 1)存储过程只在创建时进行 ...

  8. SQLServer中存储过程StoredProcedure创建及C#调用(转)

    此文作为入门了解用,转自http://www.2cto.com/database/201502/378260.html 存储过程就是已经编译好的.优化过的放在数据库服务器中的一些SQL语句:可供应用程 ...

  9. SqlServer和MySQL中存储过程out返回值处理C#代码

    1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值" //public void getdata() //{ // stri ...

随机推荐

  1. 使用设置sa用户登录sql server2008

    今天在net项目中添加数据库过程中出现了小问题,就是使用sql server身份验证没登录成功,经过一番调试,终于解决问题. 使用sa账户登录sql server 2008 的方法步骤如下: 1.首先 ...

  2. angularjs自定义指令实现分页插件

    由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能.现在单独做了个简易的小demo,主要是为了分享自己写的分页功能.注:本实例调用的 ...

  3. Quartz2.2.x官方教程

    零.Quartz是什么?能干什么? Quartz是一个开源的任务调度框架.基于定时.定期的策略来执行任务是它的核心功能,比如x年x月的每个星期五上午8点到9点,每隔10分钟执行1次.Quartz有3个 ...

  4. 201521123103 《Java学习笔记》 第六周学习总结

    一.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 二.书面作业 1.clone方法 1.1 Object对象中 ...

  5. Java课设 彩票购买抽奖程序 个人博客

    一.团队课程设计博客链接 http://www.cnblogs.com/lyq063/p/7072507.html 二.自己的代码提交记录截图 三.自己负责模块或任务详细说明 用户注册信息的存储和登录 ...

  6. 201521123007《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  7. scrapy爬虫框架

    downloader:负责下载html页面 spider:负责爬取页面内容,我们需要自己写爬取规则  srapy提供了selector,获取的方式有xpath,css,正则,extract item容 ...

  8. Visual studio code快捷键

    {"key": "escape", "command": "cancelSelection", "when&q ...

  9. Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!

    问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL serve ...

  10. jQuery中的常用内容总结(一)

    jQuery中的常用内容总结(一)   前言 不好意思(✿◠‿◠),由于回家看病以及处理一些其它事情耽搁了,不然这篇博客本该上上周或者上周写的:同时闲谈几句:在这里建议各位开发的童鞋,如果有疾病尽快治 ...