diff --git "a/04\345\215\242\344\275\263\345\207\257/\344\275\234\344\270\232/9.26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.md" "b/04\345\215\242\344\275\263\345\207\257/\344\275\234\344\270\232/9.26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..dabb6109d0418d1327f663fd65540f5210818e27 --- /dev/null +++ "b/04\345\215\242\344\275\263\345\207\257/\344\275\234\344\270\232/9.26\345\255\230\345\202\250\350\277\207\347\250\213\344\275\234\344\270\232.md" @@ -0,0 +1,35 @@ +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +go +create proc proc_yezd +as +select top 1 CardNo,RealName,CardMoney from BankCard bc inner join AccountInfo ai on ai.AccountId = bc.AccountId order by CardMoney +go +exec proc_yezd + +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +go +create proc proc_cq +@cardno varchar(20),@money money +as +update BankCard set CardMoney += @money where CardNo = @cardno +go + + +exec proc_cq'6225125478544587','3000' +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +go +create proc proc_qq +@cardno varchar(20),@money money +as +if @money <= (select cardmoney from BankCard where CardNo = @cardno) +begin + update BankCard set CardMoney -= @money where CardNo = @cardno + print 1 +end +else +begin + print -1 +end +go + +exec proc_qq'6225125478544587','3000' \ No newline at end of file diff --git "a/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.20\346\270\270\346\240\207.md" "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.20\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..99e00fd8b26949d5790cff878ea1801c07d6f8a5 --- /dev/null +++ "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.20\346\270\270\346\240\207.md" @@ -0,0 +1,20 @@ +游标 +游标分类: +(1)静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变 (2)动态游标(Dynamic):在操作游标的时候,数据发生变化,游标中数据改变,默认值。 (3)键集驱动游标(KeySet):在操作游标的时候,被标识的列发生改变,游标中数据改变,其他列改变,游标中数据不变。 + +创建游标 +declare <游标名> cursor scroll for 查询的语句 +打开游标 +open 游标名 +关闭游标 +close 游标名 +删除游标 +deallocate 游标名 + +提取数据 +fetch first from <游标名> --第一行 +fetch last from <游标名> --最后一行 +fetch absolute 1 from <游标名> --从游标的第一行开始数,第n行。绝对的 +fetch relative 3 from <游标名> --从当前位置数,第n行。相对的 +fetch next from <游标名> --当前位置的下一行 +fetch prior from <游标名> --当前位置的上一行 \ No newline at end of file diff --git "a/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.21\345\207\275\346\225\260.md" "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.21\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..b5d20213820f9b3f17097d908eef533b6d993955 --- /dev/null +++ "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.21\345\207\275\346\225\260.md" @@ -0,0 +1,25 @@ +函数 +(1)系统函数:, + +(2)自定义函数(方法:将一个功能封装成可重用的函数)。 + +(1)标量值函数(返回单个值) +(2)表值函数(返回查询结果) +标量值函数 +create function 名称(@参数名 数据类型) +returns date_type --返回返回值的数据类型 +as +begin + 函数体 + return 表达式; +end +表值函数 +create function 名称 +returns @局部变量 table(参数名 参数类型) +as + begin + 函数体 + return 函数返回值 + end +删除自定义函数 +drop function 函数名 \ No newline at end of file diff --git "a/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.22\346\255\273\351\224\201.md" "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.22\346\255\273\351\224\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..12a8b23e236c006160f4ed59fe3e2e19448967c2 --- /dev/null +++ "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.22\346\255\273\351\224\201.md" @@ -0,0 +1,16 @@ +死锁 +概念 +就是两个或多个trans,同时请求对方正在请求的某个实际应用对象,而导致双方互相等待。 +几种表现 +--表现1. + +一个用户A 访问表A(锁住了表A),然后又访问表B。 +另一个用户B 访问表B(锁住了表B),然后企图访问表A, +这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了,同样用户B要等用户A释放表A才能继续,这就造成死锁了。 + +--解决方法: +这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法 +仔细分析你程序的逻辑, +1:尽量避免同时锁定两个资源 +2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源. + diff --git "a/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..7e5726d67fe8f54011b8fbca1f8d939d4b83ad62 --- /dev/null +++ "b/04\345\215\242\344\275\263\345\207\257/\347\254\224\350\256\260/9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,43 @@ +定义存储过程 + + +无参无返回值 +没有输入参数,没有输出参数的存储过程 +go +create proc 存储过程名 +as +语句 +go + +exec 存储过程名 + + +有参无返回值 +有输入参数,没有输出参数的存储过程 +go +create proc 存储过程名 +declare @变量1 数据类型, +declare @变量2 数据类型 +as +语句 +go + +exec 存储过程名 参数1,参数2 + + +带输出参数存储过程: +go +create proc|procedure 存储名(一般以proc_开头) +@值 参数类型 +@值2 参数类型 out -输出参数 +@值3 参数类型 output --输入输出参数 +as +sql语句 +go + +declare @值 参数类型 +declare @值2 参数类型 +declare @值3 参数类型 + +exec 存储名 '@值',@值2 out,'@值3' output +print @值1 +@值2 \ No newline at end of file