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 @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中存储过程和游标的一些使用例子的更多相关文章
- Sqlserver中存储过程,触发器,自定义函数(一)
Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...
- SQLServer 中存储过程
SQLServer 中存储过程返回的三种方式( 包括存储过程的创建, 在存储过程中调用, 在VS中调用的方法)存储过程有三种返回: 1. 用return返回数字型数据 2. 用返回参数 ...
- Sqlserver中存储过程,触发器,自定义函数(二)
Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...
- Sqlserver中存储过程,触发器,自定义函数
Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...
- SqlServer中存储过程中将Exec的执行结果赋值给变量输出
原文 SqlServer中存储过程中将Exec的执行结果赋值给变量输出 背景: 遇到这样一种情况:动态向存储过程中传入表名和表的某些属性(这里用到的是主键ID),然后利用这两个变量查出一条数据的某些字 ...
- SqlServer中存储过程 returnC#代码处理以及对应的MySQL如何改写
一.SqlServer 中 1. 创建表 create table testuser( id int, --primary key, names ), address ), paw ) ) 2.创建存 ...
- sqlserver 中存储过程的基础知识记录
1.什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令. 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句. 2.为什么要用存储过程? 1)存储过程只在创建时进行 ...
- SQLServer中存储过程StoredProcedure创建及C#调用(转)
此文作为入门了解用,转自http://www.2cto.com/database/201502/378260.html 存储过程就是已经编译好的.优化过的放在数据库服务器中的一些SQL语句:可供应用程 ...
- SqlServer和MySQL中存储过程out返回值处理C#代码
1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值" //public void getdata() //{ // stri ...
随机推荐
- 第4阶段——制作根文件系统之分析init进程(2)
本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3) 分析busybox中init进 ...
- html标签缺省(自带)样式大全
html标签默认样式整理 作者:佚名 来源:互联网 时间:07-30 16:54:48 文为大家整理了html标签默认样式属性及浏览器默认样式等等,喜欢css布局的朋友们可以学下,希望对大家有所帮助 ...
- socket和抓包工具wireshark
socket和抓包工具wireshark 最近在学习Python代码中的socket和抓包工具wireshark,故又将socket等概念又学习了一遍,温故而知新: Python代码如下: serve ...
- 九度OJ 1013 开门人和关门人
#include <iostream> #include <string.h> #include <sstream> #include <math.h> ...
- 团队作业4——第一次项目冲刺(Alpha版本)第一天+第二天+第三天+第四天+第五天+第六天+第七天
冲刺第一天 一.Daily Scrum Meeting照片 二.每个人的工作 1.今天计划完成的任务 GUI.计时功能.题目生成 2.工作中遇到的困难 刚开始在计时功能模块只能做到秒位,经过查询资料后 ...
- 【集美大学1411_助教博客】alpha阶段后 成绩
团队作业7 成绩(助教对团队排名) 团队名称 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 全组讨论的照片 团队成员在Alpha阶段的角色和具体贡献 合计 排 ...
- sudoku--设想
在查阅了一些资料和自己动手写一写后,找到一种可行的解法. 第一步 首先将9x9的数独方格分成九份3x3的九宫格,如下图 B1 B2 B3 B4 B5 B6 B7 B8 B9 而后在左上角的B1上随机生 ...
- ajax中后台string转json
首先导入alibaba的fastJson包 后台: String thirdPage1=prop.getProperty("thirdPage1"); String thirdPa ...
- 201521123016《Java程序设计》第12周学习总结
1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. 1 ...
- oracle 建表空间->创建用户并把表空间分配给用户->给用户授权->导库
首先注意:我参考网上使用的sysdba模式(normal)登陆的,其他的模式建不了用户(个人没有进行其他模式的表空间尝试,如有人尝试欢迎补充,感激不尽) 表空间相当于表的容器(一下所有的操作都适用于o ...