记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息
昨晚完成了Web端新增图书信息的功能,现在就差DB的具体实现了。
因为我把Book相关的信息拆分的比较多,所以更新有点小麻烦。
首先,我需要创建一个Book Type的Matter;
然后,将图片路径保存到FileBank中,并返回FileBankID;
继续,插入Publisher信息(需要判断name不存在才会insert),然后返回PublisherID;
CREATE PROCEDURE [base].[Publisher#Insert](@json nvarchar(max), @id int out)
WITH ENCRYPTION
AS
BEGIN
... declare @name nvarchar(100);
select @name=Publisher from openjson(@json, '$') with (Publisher nvarchar(100)) -- insert Publisher
insert base._Publisher(Name)select @name
where not exists(select 1 from base._Publisher p where p.Name=@name); select @id=ID from base.Publisher#Raw() where Name=@name;
...
END
继续,插入Binding信息(也需要判断name不存在才insert),返回BindingID;
CREATE PROCEDURE [base].[Binding#Insert](@json nvarchar(max), @id int out)
WITH ENCRYPTION
AS
BEGIN
... declare @name nvarchar(100);
select @name=Binding from openjson(@json, '$') with (Binding nvarchar(100)) -- insert Binding
insert base._Binding(Name)select @name
where not exists(select 1 from base._Binding p where p.Name=@name); select @id=ID from base.Binding#Raw() where Name=@name; ...
END
继续,插入Book信息;
继续,插入BookInfo的信息;
继续,插入BookNbr信息;
继续,插入BookSupplement信息;
继续,插入BookTag信息;
CREATE PROCEDURE [base].[BookTag#Insert](@json nvarchar(max), @bookID bigint)
WITH ENCRYPTION
AS
BEGIN
... -- insert Tag
insert base._Tag(Name)select value
from openjson(@json, '$.Tags') x
where not exists(select 1 from base._Tag p where p.Name=x.value); insert base._BookTag(BookID, TagID) select @bookID, x.ID
from openjson(@json, '$.Tags') j join base.Tag#Raw() x on x.Name=j.value ...
END
继续,插入BookAuthor信息;
CREATE PROCEDURE [base].[BookAuthor#Insert](@json nvarchar(max), @bookID bigint)
WITH ENCRYPTION
AS
BEGIN
... -- insert Author
insert base._Author(Name)select value
from openjson(@json, '$.Authors') x
where not exists(select 1 from base._Author p where p.Name=x.value); insert base._BookAuthor(BookID, AuthorID) select @bookID, x.ID
from openjson(@json, '$.Authors') j join base.Author#Raw() x on x.Name=j.value ...
END
继续,插入BookTranslator信息;
CREATE PROCEDURE [base].[BookTranslator#Insert](@json nvarchar(max), @bookID bigint)
WITH ENCRYPTION
AS
BEGIN
... -- insert Translator
insert base._Author(Name)select value
from openjson(@json, '$.Translators') x
where not exists(select 1 from base._Author p where p.Name=x.value); insert base._BookTranslator(BookID, TranslatorID) select @bookID, x.ID
from openjson(@json, '$.Translators') j join base.Author#Raw() x on x.Name=j.value ...
END
最后,关联新增的Book信息和Shelf,插入ShelfBook信息。
现在放出Init Script
Book_Init.sql
CREATE PROCEDURE [svc].[Book$Init](@json nvarchar(max))
WITH ENCRYPTION
AS
BEGIN
... declare @stringID varchar(36), @userID int, @shelfID int;
select @stringID=u.StringID, @userID=u.ID, @shelfID=s.ID
from openjson (@json, '$') with (StringID varchar(36))
cross apply core.User#For(StringID) u
join core.Party#Raw() s on s.PID=u.ID; declare @stateID int=(select BookCreated from core.Status#ID()); -- init Matter
insert core._Matter(Type, UserID, StateID)
select k._Book, @userID, @stateID from core.Matter#Type() k;
declare @matterID int=@@identity; -- init FileBank
insert base._FileBank(Type, Url)
select k._BookImage, ImageUrl
from openjson(@json, '$') with (ImageUrl varchar(200))
cross apply base.FileBank#Type() k;
declare @imageID int=@@identity; -- insert Publisher
declare @publisherID int;
exec base.Publisher#Insert @json=@json, @id=@publisherID out; -- insert Binding
declare @bindingID int;
exec base.Binding#Insert @json=@json, @id=@bindingID out; -- insert Book
insert base._Book(ID, Title, PublisherID, BindingID, ImageID)
select @matterID, Title, @publisherID, @bindingID, @imageID
from openjson(@json, '$') with (Title nvarchar(100)); -- insert BookInfo
insert base._BookInfo(ID, OriginTitle, PageCnt, Pubdate, SubTitle)
select @matterID, OriginTitle, Pages, Pubdate, SubTitle
from openjson(@json, '$')
with (
Pages int,
Pubdate char(10),
SubTitle nvarchar(150),
OriginTitle nvarchar(150)
); -- insert BookNbr
insert base._BookNbr(ID, Type, Number)
select @matterID, k._ISBN13, Isbn13
from base.BookNbr#Type() k, openjson(@json, '$') with (Isbn13 char(13)); insert base._BookNbr(ID, Type, Number)
select @matterID, k._ISBN10, Isbn10
from base.BookNbr#Type() k, openjson(@json, '$') with (Isbn10 char(10)); -- insert BookSupplement
insert base._BookSupplement(ID, Type, Supplement)
select @matterID, k._AuthorIntro, AuthorIntro
from base.BookSupplement#Type() k, openjson(@json, '$') with (AuthorIntro nvarchar(max)); insert base._BookSupplement(ID, Type, Supplement)
select @matterID, k._Summary, Summary
from base.BookSupplement#Type() k, openjson(@json, '$') with (Summary nvarchar(max)); insert base._BookSupplement(ID, Type, Supplement)
select @matterID, k._Catalog, Catalog
from base.BookSupplement#Type() k, openjson(@json, '$') with (Catalog nvarchar(max)); -- insert BookTag
exec base.BookTag#Insert @json=@json, @bookID=@matterID; -- insert BookAuthor
exec base.BookAuthor#Insert @json=@json, @bookID=@matterID; -- insert BookTranslator
exec base.BookTranslator#Insert @json=@json, @bookID=@matterID; -- insert ShelfBook
insert base._ShelfBook(BookID, ShelfID) values(@matterID, @shelfID); ...
END
好了,开始测试。
...
查询DB,看看有没有数据进DB:


截图中展示了部分查询结果,基本没什么问题了。
下面要做的是展示Shelf中的Book信息,要等今天活干完才能继续写了。
记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息的更多相关文章
- 记开发个人图书收藏清单小程序开发(三)DB设计
主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...
- 记开发个人图书收藏清单小程序开发(五)Web开发
决定先开发Web端试试. 新增Web应用: 选择ASP.NET Core Web Application,填写好Name和Location,然后点击OK. 注意红框标出来的,基于.NET Core 2 ...
- 记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息
书房信息初始化已完成,现在开始处理图书信息新增功能. 主要是实现之前New Razor Pages的后台部分. 新增需要保存的Model:Book.InitSpec.cs /Models/Book.I ...
- 记开发个人图书收藏清单小程序开发(六)Web开发
Web页面开发暂时是没有问题了,现在开始接上Ptager.BL的DB部分. 首先需要初始化用户和书房信息.因为还没有给其他多余的设计,所以暂时只有个人昵称和书房名称. 添加 Init Razor Pa ...
- 记开发个人图书收藏清单小程序开发(四)DB设计
早上起来,又改动了一下: 主要是,将非常用信息全部拆分出来,让Table尽量的小,小到不能继续拆分了,这样区分DB逻辑.增加了FileBank存储Book的封面图片,统一管理图片资源. 新添加的Typ ...
- 记开发个人图书收藏清单小程序开发(七)DB设计
前面的书房初始化的前端信息已经完善,所以现在开始实现DB的Script部分. 新增Action:Shelf_Init.sql svc.sql CREATE SCHEMA [svc] AUTHORIZA ...
- 微信小程序开发系列一:微信小程序的申请和开发环境的搭建
我最近也刚刚开始微信小程序的开发,想把我自学的一些心得写出来分享给大家. 这是第一篇,从零开始学习微信小程序开发.主要是小程序的注册和开发环境的搭建. 首先我们要在下列网址申请一个属于自己的微信小程序 ...
- 微信小程序开发系列五:微信小程序中如何响应用户输入事件
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- 微信小程序开发系列七:微信小程序的页面跳转
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
随机推荐
- Java_反射机制详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
- 分区助手里如何从临近盘(如D盘)抽取一定的空间给已经快满了的盘(如E盘)(博主推荐)(图文详解)
不多说,直接上干货! 分区助手是什么?(博主推荐)(图文详解) 分区助手各版本比较(图文详解) 分区助手官网使用教程(专业版.绿色版和WinPE版)(图文详解) 安装分区助手时出现“分区助手已安装到你 ...
- Flow类
JLS参考:https://docs.oracle.com/javase/specs/jls/se7/html/jls-16.html This pass implements dataflow an ...
- centos6.5 + 7 静态ip配置
2017/09/19日更, centos6.5 可用 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static D ...
- git升级后jenkins的报错
1.首先卸载原有的git #yum remove git 2.源码安装新版本的git https://www.kernel.org/pub/software/scm/git/ 下载最新的版本,然后编译 ...
- 前端性能优化---缓存篇SDK
1.把前端最常用的资源css.js存在本地1.1 前端缓存技术SessionStorage 优点:临时存储神器,关闭页面标签自动回收,不可以跨页面交互. 取值的时候有两种方法,一种是用session ...
- H5开发过程中修复的bug记录
从2016年8月1日开始真正意义上的修复bug,也是自己开发之路的开端,希望在这里记录自己修bug过程中遇到的问题及解决方法,待能够自己开发需求的时候,计划记录开发新需求过程中遇到的问题,并且记录自己 ...
- Java8常用新特性实践
前言: 时下Oracle开速迭代的Java社区以即将推出Java10,但尴尬的是不少小中企业仍使用JDK7甚至JDK6开发. 从上面列出的JDK8特性中我们可以发现Java8的部分特性很明显的是从Sc ...
- vue-cli中引入jquery
vue-cli 在引入bootstrap时总是报找不到jquery.(模板用的webpack) 在webpack.base.conf.js里加入 var webpack = require(" ...
- Head First Python学习笔记1
# 递归 def recursion(movies): for item in movies: # isinstance是一个判断类型的函数 if isinstance(item,list): rec ...