/*带输入输出参数存储过程*/
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. poj2942(双联通分量,交叉染色判二分图)

    题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...

  2. C# yield return用法

    本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解.具体如下: yield关键字用于遍历循环中,yi ...

  3. 【深入Java虚拟机】之八:Java垃圾收集机制

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/18076173 对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了J ...

  4. 团队作业8——第二次项目冲刺(Beta阶段)5.20

    1.当天站立式会议照片 会议内容: 本次会议为第二次会议 本次会议在陆大楼2楼召开,本次会议内容: ①:检查第一次任务完成情况 ②:做第二次任务的详细分工 ③:规定完成时间是在第三次任务之前 ④:遇到 ...

  5. 201521123083《Java程序设计》第四周学习总结

    [toc] 1. 本周学习总结 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 在这里 ...

  6. 201521123111《Java程序设计》第7周学习总结

    1. 本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 线性表,栈,队列,哈希表是常用的数据结构 在java.util包中有这些数据结构的实现类.比如:List接口,实现类Arra ...

  7. 201521123113 《Java程序设计》第3周学习总结

    1. 本周学习总结 2.书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...

  8. 201521123048 《java程序设计》 第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  9. 201521123001《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  10. [python学习笔记] 数据类型与语法

    数据类型 数值型 int 整形 没有long类型,可以代表任意大小的整数. type(1) -> int float 浮点数 也没有double类型 type(1.2) -> float ...