next

SQL Server 中用While循环替代游标(Cursor的解决方案

拟墨画扇 提交于 2020-10-03 08:20:21
原文:https://www.cnblogs.com/swq6413/archive/2012/09/01/2667190.html 在编写SQL批处理或存储过程代码的过程中,经常会碰到有些业务逻辑的处理,需要对满足条件的数据记录逐行进行处理,这个时候,大家首先想到的方案大部分是用“游标”进行处理。   举个例子,在订单管理系统中,客服需要对订单日期为2012-09-01的销售订单进行某个批量操作,比如批量发货操作,后台业务逻辑处理时,需要对满足条件的订单记录进行逐行处理。   我首先是采用“游标”编写的业务逻辑存储过程,SQL代码可以如下: 游标 DECLARE @ORDERID VARCHAR(30) -- 声明局部游标:从订单数据表获取订单日期为2012-09-01,订单类型为Sales的订单编号 DECLARE CURSOR_ORDER CURSOR LOCAL FOR SELECT ORDERID FROM ORDERHD H WHERE ORDERDATE = '2012-09-01' AND H.ORDERTYPE = 'Sales' -- 打开游标 OPEN CURSOR_ORDER FETCH NEXT FROM CURSOR_ORDER INTO @ORDERID WHILE @@FETCH_STATUS = 0 BEGIN /*

ICMPv6与NDP

时间秒杀一切 提交于 2020-10-03 07:39:16
1 ICMPv6 1.1 报文格式 ICMPv6 协议号为 58 ,即 next header 值为 58 ,除了 IPv4 的作用外,还增加了邻居发现、无状态自动配置、 PMTU 等功能,报文格式如下: 0 7 15 31 Type Code Checksum Message Body Type : 8bit ,表明消息类型, 0~127 代表错误报文 ( 即最高位为 0) , 128~255 代表消息报文 ( 即最高位为 1) ; Code : 8bit ,表明具体的原因; Checksum : 16bit ,校验和,验证报头完整性 Message Body :可变长,数据部分。 Typer 类型表 : Type Code 备注 1( 目的不可达 ) 0 没有去往目的地的路由 1 与目的地的通信被管理员禁止 2 超出源地址范围 3 地址不可达 4 端口不可达 5 源地址在进出策略中拒绝 6 拒绝去目的地的路由 2( 数据包过大 ) 0 此报文必须是路由器发送,用于响应数据包大于出接口 MTU 情况时不能被转发,此报文会携带本接口 MTU 发给源端,是 PMTU 发现的基础 3( 超时 ) 0 超出 TTL 限制 1 分片重组超时 4( 参数错误 ) 1 基本头或者扩展头有错误的字段 2 有不可识别的 next header 字段 3 扩展头中有未知的选项 128 0 Echo

gdb命令调试技巧

徘徊边缘 提交于 2020-10-03 06:34:40
gdb命令调试技巧 一、信息显示 1、显示gdb版本 (gdb) show version 2、显示gdb版权 (gdb) show version or show warranty 3、启动时不显示提示信息gdb -q exe 或者.bashrc 添加alias gdb="gdb -q",重启shell 4、退出时不显示提示信息(gdb) set confirm off 5、输出信息多时不会暂停输出(gdb)set pagination off 二、函数 1、列出函数的名字(gdb) info functions 2、是否进入待调试信息的函数(gdb)step s 3、进入不带调试信息的函数(gdb)set step-mode on 4、退出正在调试的函数(gdb)return expression 或者 (gdb)finish 5、直接执行函数(gdb)start 函数名 call函数名 6、打印函数堆栈帧信息(gdb)info frame or i frame 7、查看函数寄存器信息(gdb)i registers 8、查看函数反汇编代码(gdb)disassemble func 9、打印尾调用堆栈帧信息(gdb)set debug entry-values 1 10、选择函数堆栈帧(gdb)frame n 11、向上或向下切换函数堆栈帧(gdb)up n down n 三

ffmpeg实现dxva2硬件加速

女生的网名这么多〃 提交于 2020-10-03 05:46:49
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档。这是第二篇,记录用ffmpeg实现dxva2。 第一篇翻译的Direct3D device manager,链接: http://www.cnblogs.com/betterwgo/p/6124588.html   第二篇翻译的在DirectShow中支持DXVA 2.0,链接: http://www.cnblogs.com/betterwgo/p/6125351.html   在做dxva2的过程中,参考了许多网上的代码,这些代码又多参考VLC和ffmpeg的例子。 1.ffmpeg支持dxva2硬件加速的格式   当前我所使用的ffmpeg的版本是3.2,支持dxva2硬件加速的有以下几种文件格式: AV_CODEC_ID_MPEG2VIDEO、AV_CODEC_ID_H264、AV_CODEC_ID_VC1、AV_CODEC_ID_WMV3、AV_CODEC_ID_HEVC、AV_CODEC_ID_VP9 。ffmpeg识别为这几种格式的文件都可以尝试使用dxva2做硬件加速。但这并不代表是这几种格式的文件就一定支持dxva2硬件加速,因为我就遇到了一个AV_CODEC_ID_HEVC文件在初始化配置dxva2的过程中会失败,PotPlayer在播放这个文件时也不能用dxva2硬件加速。 2

AQS底层原理分析

廉价感情. 提交于 2020-10-03 05:15:38
juc 1)synchronized实践中的问题: 锁的获得、锁的释放,不够灵活--》Lock的出现 2)Lock是一个接口: 意味着这是一个标准,有很多种实现。 重入锁,读写锁。 3)ReentrantLock: 重入的含义:获得锁时,再次去获得锁,只用记录次数就行,而不会阻塞。 synchronized 和 ReentrantLock 重入是为了解决死锁问题的。 4) AQS Sync 公平锁 非公平锁 5)ReentrantLock重入互斥锁 6)ReentrantReadWriteLock: 只是读的话,是不需要加锁的。 读多写少时可以提升性能。 只有读的时候,不会阻塞。 而A线程在写,B线程想去读取的时候,就会阻塞。 原因是: 必须保证B获取到的值是A写入的值。 写写、读写 就会互斥。 而 读读是不会互斥的。 7)ReentrantLock的实现: 当一个线程竞争锁的时候,其它线程怎么办? 按照我们之前的理解,必然是阻塞。那么如何实现的? 同步队列。 8)AQS有2种功能: 独占: 独占是互斥。 共享: 共享就是读写锁。 9)AQS的基本实现: 维护了一个双向链表。线程竞争失败时,被封装为Node(pre、next)节点加入,Node就是抢占锁失败的线程。 10)锁的基本要素: jvm层面的CAS,调用unsafe层面的东西 11)非公平锁: 允许插队 公平锁:

Python安装教程

a 夏天 提交于 2020-10-03 03:11:13
Python安装 1.浏览器打开网址:www.python.org 2.根据电脑系统选择下载 3.确定电脑系统属性,此处我们以win10的64位操作系统为例 4.安装python 3.6.3 双击下载的安装包 python-3.6.3.exe 注意要勾选:Add Python 3.6 to PATH 点击 Customize installation进入一步(方便我们自定义安装路径) (下节会为大家介绍环境变量的配置) 5.点击Next 6.选择自己想要存储的文件夹,点击Install 7.开始安装 8.点击Close结束安装 9.开始——搜索框中输入“cmd”——回车,启动命令提示符——输入Python 这样就代表安装成功啦。 来源: oschina 链接: https://my.oschina.net/u/4255780/blog/4535865

JS实现轮播图特效(带二级导航)

北慕城南 提交于 2020-10-03 01:50:12
按照国际惯例先放效果图 index.html <! DOCTYPE html > < html lang ="en" > < head > < meta charset ="UTF-8" > < title > demo </ title > < link rel ="stylesheet" href ="css/style.css" > </ head > < body > < div class ="main" id ="main" > < div class ="menu-box" ></ div > <!-- 子导航 --> < div class ="sub-menu hide" id ="sub-menu" > < div class ="inner-box" > < div class ="sub-inner-box" > < div class ="title" > 手机、配件 </ div > < div class ="sub-row" > < span class ="bold mr10" > 手机通讯: </ span > < a href ="" > 手机 </ a > < span class ="ml10 mr10" > / </ span > < a href ="" > 手机维修 </ a > < span class ="ml10 mr10" >

CCNP(BSCI)实验:路由器和PC之间的DHCP服务

左心房为你撑大大i 提交于 2020-10-03 00:03:02
预配置 在R1上的配置 Int e1/0 Ip add 192.168.1.1 255.255.255.0 No sh 在Pc上的配置 实验过程: 第一步:在R1上配置DHCP服务 R1(config)#ip dhcp pool libo //配置一个DHCP地址池,名称为libo R1(dhcp-config)#default-router 192.168.1.1 //配置默认网关 R1(dhcp-config)#network 192.168.1.0 /24 //配置一个dhcp分配的网段 R1(dhcp-config)#dns-server 1.1.1.1 //配置一个dns域名解释服务器地址 R1(dhcp-config)#domain-name www.good.com //配置域名为 R1(dhcp-config)#lease 1 (infinite) //配置租期为1天(无限) R1(config)#ip dhcp excluded-address 192.168.1.1 //配置不发放地址 第二步:查看dhcp地址池 R1#sh ip dhcp pool libo Pool libo : Utilization mark (high/low) : 100 / 0 Subnet size (first/next) : 0 / 0 Total addresses :

PHP设计模式

大城市里の小女人 提交于 2020-10-03 00:02:04
单例模式(Singleton) /* ** * Class Singleton 单例模式 * 单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 * 1.私有的构造函数、克隆函数,防止外部代码new、clone * 2.私有的静态的成员变量来保存类的实例 * 3.公共的静态函数来访问类的实例 */ class Singleton { private static $instance = null ; // 声明一个私有的实例变量 public static function getInstance() { if (self:: $instance === null ) { self :: $instance = new self(); } return self:: $instance ; } private function __construct() { } private function __clone() { } } $a = Singleton:: getInstance(); $b = Singleton:: getInstance(); /* 判断两个类是否为同一个类 */ echo $a === $b ? 1 : 0; // 1 exit ; 工厂模式 注册模式 适配器模式 观察者模式 依赖注入模式

java学习笔记-Map集合中的HashMap集合与Hashtable

假如想象 提交于 2020-10-02 23:41:14
目 录 HashMap集合(非线程安全的) 两个重要方法put、get(重点) 为什么哈希表的随机增删、查询效率都高? HashMap集合的部分特点 HashMap的初始化默认容量 关于HashMap的equals方法和hashCode方法 拓展 Hashtable集合(线程安全的) HashTable和HashMap的部分区别 HashTable的初始化容量 Properties HashMap集合(非线程安全的) HashMap集合底层是哈希表/散列表的数据结构(哈希表是一个数组和单向链表的结合体) HashMap底层有三个值:hash key value next (哈希表:是一个一维数组,数组中每个元素是一个单链表) 两个重要方法put、get(重点) 两个重要方法put、get 存:map.put(k,v)实现原理:(掌握) 第一步:先将k,v封装到Node对象中 第二步:底层会调用k的hashCode()方法得出hash值,然后通过哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果下标对应位置上有链表,此时会拿着k和链表上每页节点的k进行equals,如果所有的equals方法返回的都是false,那么这个新节点被添加到这个链表的的末尾。如果其中有一个equals返回的true,那么这个节点value将会被覆盖  取