SqlServer专题

目录

1,连接数据库

2,连接池        

1.何为连接池?

2.连接池运行原理。

3.如何查看连接池?

4.连接池注意事项。

3,一般SQL语句。

4,控制语句

1.判断语句

2.循环语句

5,视图

1.使用MSSM创建视图:

2.使用SQL脚本创建

3.调用视图。

4.视图注意事项。

6,事务

7,临时表

8,存储过程

9,类型转换

10,表格

11,账号管理


1,连接数据库

  • 普通连接字符串:
 <connectionStrings><add name="constr" connectionString="server=.;database=SMDB;uid=sa;pwd=1”/></connectionStrings>
  • 启用连接池的连接字符串:
 <connectionStrings><add name="constr" connectionString="server=.;database=SMDB;uid=sa;pwd=1;Pooling=true;Max pool size=10;Min Pool size=5"/></connectionStrings>

        --Pooling =true :表示启用连接池
        --Max Pool Size=10:表示连接池中最大允许的连接数量
        --Min Pool Size=5;表示连接池中最小的连接数量

        当第一次访问时即建立5个连接,以后根据需要自动增加连接数量,但最多不超过规定的10个连接,如果超过10个并发请求时,在连接池之外建立连接对象,在连接池以外建立的连接关闭后会释放连接

2,连接池        

1.何为连接池?

        连接池是DataProvider提供的一个机制,使得应用程序的链接保存在连接池中,从而避免每次都要完成建立/关闭物理连接的整个过程。

2.连接池运行原理。

        当使用连接池以后,执行Open()方法的时候,系统从连接池中提取一个现有的连接对象,这时打开的是一个逻辑连接如果连接池中的连接对象都被占用了,则会创建一个新的物理连接对象。当使用Close()方法关闭连接池时,系统把连接对象放回到连接池中,这时关闭的是一个逻辑连接。如果是独立创建的对象则会被GC释放。

3.如何查看连接池?

    调用存储过程:exec sp_who可以查看当前数据库连接详情

exec sp_who

4.连接池注意事项。

          在winform中,连接字符串必须一致,这样不同应用程序可以共享数据库中的连接池的连接对象,如果应用程序的连接字符串不同,则数据库会给每个连接创建一个连接池,一定要避免这种情况。
        在web应用程序中,因为连接字符串只在服务端,所以不会出现以上情况。

3,一般SQL语句。

--将结果以xml格式显示
select * from StudentInfo where Sid<30 for xml raw ('Student')--清空表格
truncate table students--查询表格
select * from tempStudent--查询前3行
select top 3 * from tb_UserInfo--查询前20%
select top 20 percent * from tb_UserInfo--模糊查询
select * from tb_UserInfo where Phone like '%张三%'
select * from tb_UserInfo where Phone like '%[2,7]'--右外连接查询
select * from tb_Course as a
right outer join tb_Category as b
on a.CateId=b.Id--查询重复
select * from tb_UserInfo where Nick in(select Nick from tb_UserInfo group by Nick  having COUNT(*)>1)order by Nick--查询空值列
select * from tb_userinfo where LogonDate is null--批量插入数据
insert into tempStudent (Sname,Sphone,Sbirthday,Semail) 
select Sname,Sphone,Sbirthday,Semail from tempStudent--向查询结果中插入常量
select *,'OK' 结果 from tb_UserInfo--删除指定的几个数据
delete from StudentInfoCopy where Sid in (10,11,14)--多列排序
select * from tb_UserInfo order by Name,Phone desc--同时执行多个sql语句时使用;进行分割insert into tb_UserInfo values('lisi4','李四',123,'122222222',0,null);insert into tb_UserInfo values('lisi5','李四',123,'122222222',0,null);insert into tb_UserInfo values('lisi6','李四',123,'122222222',0,null)--通过全局变量@@IDENTITY返回插入行生成的标识列值insert into tb_UserInfo values('lisi7','李四',123,'122222222',0,null);select @@IDENTITY--In 与 Not In使用
select StudentId,StudentName from Students  where StudentId in (select StudentId from ScoreList where SQLServerDB>60)--使用 NotIn反向查询
select StudentId,StudentName from Students  where StudentId not in (select StudentId from ScoreList where SQLServerDB>60)--Exists使用:Exists(表达式),表达式中结果个数大于0即为true ,否则为falseif (exists(select * from ScoreList  where SQLServerDB<60))print '存在未及格同学'elseprint '全部合格'--Exists反向查询 :Not Existsif(not exists(select * from ScoreList where SQLServerDB<60))print '全部合格'elseprint '存在未及格同学'

4,控制语句

1.判断语句

 declare @len intset @len=4if(@len%2=1)beginprint '奇数'endelsebeginprint '偶数'end
use SMDB
go--case条件语句应用select StudentId,SQLServerDB,
'评价'=case  
when SQLServerDB>=90 then '优秀'
when SQLServerDB between 80 and 89 then '良好'
when SQLServerDB between 60 and 79 then '合格'
else '不及格'
end
from ScoreList

2.循环语句

use SMDB
go
declare @StudentId int,@count int
set @StudentId=0
while(1=1)beginset @count=(select COUNT(*) from ScoreList where CSharp<60)if(@count=0)breakselect @StudentId=(select top 1 studentid from ScoreList where CSharp<60)update ScoreList set CSharp=60 where StudentId=@StudentId
end

5,视图

1.使用MSSM创建视图:

  • 选择视图选项,右击选择新建视图

  • 勾选需要查询的字段后保存。

2.使用SQL脚本创建

 --使用脚本创建视图if(exists(select * from sysobjects where name='My_View'))drop view My_Viewgocreate view My_Viewasselect top 100 ScoreList.StudentId,StudentName,CSharp from ScoreList join Studentson ScoreList.StudentId=Students.StudentId	order by CSharpgo

3.调用视图。

 --以查询表格的方式直接调用视图select * from My_View

4.视图注意事项。

  •  视图保存于服务端,仅用于查询,不能用于增删改。
  •  视图中可以使用多张表
  •  一个视图可以嵌套另一个视图(尽量少套用)
  •  视图中的select语句不能使用以下内容
  1. OrderBy子句,除非在Select 语句的选择列表中也有一个top子句
  2. into关键字
  3. 引用临时变量和表变量

6,事务

 --transaction事务使用--定义一个变量承接执行sql语句时可能产生的异常(通过@@Error获取实时异常代码)declare @errorSum int =0--开始事务begin tranbegindelete from Students where StudentId=100094--获取执行语句可能产生的异常代码值set @errorSum=@errorSum+@@ERRORdelete from StudentClass where ClassId=1set @errorSum=@errorSum+@@ERRORif(@errorSum>0)begin--出现异常,进行回滚rollback tranendelse--无异常,提交事务commit tranend go

7,临时表

--临时表:位于系统数据库->tempdb->临时表
--临时表,在语句调用完毕后自动删除,在管理器端使用脚本生成的临时表,重启管理软件自动删除
--使用into #临时表名,将结果插入到临时表中select StudentId,StudentName into #mylist from Students
--查询临时表select * from #mylist--手动删除临时表drop table #mylist

8,存储过程

--定义存储过程语法
--系统存储过程以sp_开头,扩张存储过程以xp_开头
CREATE PROC[EDURE] 存储过程名@参数1 数据类型=默认值 ,@参数2 数据类型=默认值 OUTPUT.......
ASSQL 语句
GO带默认值得参数使用
以存储过程名为usp_MyProc为例--带有默认参数的存储过程if(exists(select * from sysobjects where name='usp_MyProc'))drop proc usp_MyProcgocreate proc usp_MyProc--带有默认值的参数格式为 变量名 类型=默认值@Id int=100000,@name varchar(20)=''asselect * from ScoreList where StudentId=@Idselect * from Students where StudentName=@namego--调用带有默认值得存储过程--方式1 exec usp_MyProc--方式2exec usp_MyProc 100001,'张三'--方式3exec usp_MyProc default,'张三'--方式4exec usp_MyProc @name='张三'
--使用带有output声明的形参作为结果输出接口--分析学员成绩的存储过程if(exists(select * from sysobjects where name='usp_queryScore'))drop proc usp_queryScoregocreate proc usp_queryScore @className varchar(20),@total int output,@miss int output,@csharp  float output,@db float outputas--判断@classname是否为空if(LEN(@className)=0)beginselect Students.StudentId,StudentName,Gender,ClassName,PhoneNumber,CSharp,SQLServerDB from ScoreListjoin Studentson ScoreList.StudentId=Students.StudentIdjoin StudentClasson StudentClass.ClassId=Students.ClassIdselect @total=COUNT(*),@csharp=SUM(CSharp)*1.0/COUNT(*),@db=AVG(SQLServerDB) from ScoreListselect @miss=COUNT(*) from Students where StudentId not in (select StudentId from ScoreList)--缺考人员列表select StudentName from Students where StudentId not in (select StudentId from ScoreList) endelsebegin--显示列表select Students.StudentId,StudentName,Gender,ClassName,PhoneNumber,CSharp,SQLServerDB from ScoreListjoin Studentson ScoreList.StudentId=Students.StudentIdjoin StudentClasson StudentClass.ClassId=Students.ClassIdwhere ClassName=@className--该班级总参加人数--declare @className varchar(20)='软件1班'select @total=COUNT(*),@csharp=SUM(CSharp)*1.0/COUNT(*),@db=AVG(SQLServerDB) from ScoreList join Studentson ScoreList.StudentId=Students.StudentIdinner join StudentClasson Students.ClassId=StudentClass.ClassIdwhere StudentClass.ClassName=@className--该班级未参加考试人员select @miss=COUNT(*) from Students where StudentId not in (select StudentId from ScoreList) and ClassId=(select top 1 ClassId from StudentClass where ClassName=@className)--该班级缺考人员列表select StudentName,ClassId from Students where StudentId not in (select StudentId from ScoreList) and ClassId=(select top 1 ClassId from StudentClass where ClassName=@className)endgo
declare @className varchar(20)='软件2班'
declare @total int 
declare @miss int
declare @csharp float
declare @db float
exec usp_queryScore @className,@total output,@miss output,@csharp output,@db output
select 班级名= @className ,参考总人数= @total,缺考人数=@miss,Csharp平均分=@csharp,@db 数据库平均分

         C#端调用

        /// <summary>/// 执行存储过程/// </summary>/// <param name="procName">存储过程名</param>/// <param name="paras">参数</param>/// <returns>返回的数据集</returns>public static DataSet ExecutProcedure(string procName,params SqlParameter[] paras){SqlConnection con = new SqlConnection(constr);DataSet set = new DataSet();try{using (SqlCommand com=new SqlCommand()){com.Connection = con;com.CommandText = procName;com.Parameters.AddRange(paras);//指定文本类型com.CommandType = CommandType.StoredProcedure;using (SqlDataAdapter sda=new SqlDataAdapter(com)){sda.Fill(set);                       }}}finally{con.Close();}return set;}public AnalyseResult GetScoreAnalyse(string className){AnalyseResult result = new AnalyseResult();//declare @className varchar(20)//declare @total int//declare @miss int//declare @csharp float//declare @db float//定义参数SqlParameter[] paras = new SqlParameter[]{new SqlParameter("@className",className) ,new SqlParameter("@total",SqlDbType.Int) { Direction = ParameterDirection.Output } ,new SqlParameter("@miss",SqlDbType.Int) { Direction = ParameterDirection.Output } ,new SqlParameter("@csharp",SqlDbType.Float) { Direction = ParameterDirection.Output } ,new SqlParameter("@db",SqlDbType.Float) { Direction = ParameterDirection.Output }};DataSet set = SqlHelper.ExecutProcedure("usp_queryScore", paras);result.Total = Convert.ToInt32(paras[1].Value);result.Missing = Convert.ToInt32(paras[2].Value);result.CSharp = paras[3].Value is DBNull ? 0 : Convert.ToSingle(paras[3].Value);result.Db = paras[4].Value is DBNull ? 0 : Convert.ToSingle(paras[4].Value);//获取集合result.ScoreDataTable = set.Tables[0];result.MissingDataTable = set.Tables[1];return result;}

9,类型转换

--数字不能与字符串通过+直接相加所以使用convert进行转换
select CONVERT(varchar(20), @first)+@second
--获取日期部分
select CONVERT(date,getdate())
--数字转为字符串
select CAST(100 as varchar(20))

10,表格

--创建数据表
if (exists(select * from sysobjects where name='MenuList'))
drop table MenuList
go
create table MenuList
(MenuId int identity(100,1) primary key,MenuName varchar(50),MenuCode varchar(50),Tag int,ParentId int not null
)
go--清空表格
truncate table menulist--彻底删除表格
drop table menulist

11,账号管理

--创建登录账号,登录密码
use master
go
exec sp_addlogin 'lzg','1'
--创建数据库用户,指定用户可以访问哪些数据库
use SMDB
go
exec sp_grantdbaccess 'lzg'--dbo用户
--表示数据库的所有者(DB Owner),无法删除dbo用户,该用户始终出现在每个数据库中。
--abo用户默认分配给sa登录账号--删除登录账号
use master
go
exec sp_droplogin 'lzg'--删除数据库用户
use SMDB
exec sp_dropuser 'lzg'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<计算机网络自顶向下> P2P应用

纯P2P架构 没有或者极少一直运行的Server&#xff0c;Peer节点间歇上网&#xff0c;每次IP地址都可能变化任意端系统都可以直接通信利用peer的服务能力&#xff0c;可扩展性好例子&#xff1a;文件分发; 流媒体; VoIP类别:两个节点相互上载下载文件&#xff0c;互通有无&#…

C# Solidworks二次开发:相机访问相关API详解

大家好&#xff0c;今天要介绍的API为相机相关的API&#xff0c;这篇文章比较适合女孩子&#xff0c;学会了相机就会拍照了&#xff0c;哈哈。 下面是要介绍的API: &#xff08;1&#xff09;第一个为GetFocalDistance&#xff0c;这个API的含义为获取相机的焦距&#xff0c;…

ASP.NET基于BS的图书销售管理系统的设计与实现

随着Internet的兴起&#xff0c;网络已经成为现代人生活中的一部分&#xff0c;越来越多的人喜欢在网上交易。本系统就是一个基于B/S模式的网络化的图书销售管理系统,采用的是ASP.NET技术&#xff0c;实现了用户注册信息管理、用户信息管理、图书销售点管理、图书信息管理、客户…

特征工程(IV)--特征选择

特征工程 有这么一句话在业界广泛流传&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程在机器学习中占有相当重要的地位。在实际应用当中&#xff0c;可以说特征工程是机器学习成功的关键。 特征工程是…

【C语言】简易版扫雷+进阶版扫雷

目录 前言 一、分模块化 二、准备雷盘 2.1 游戏菜单 2.2 创建雷盘思路 2.3 构建雷盘 2.4 雷盘展示 2.4.1 初始化雷盘 2.4.2 打印雷盘 三、排雷 3.1 布置雷 3.2 排查雷 四、进阶版扫雷 总结 前言 C语言实现扫雷小游戏&#xff0c;帮我们更进一步的掌握数组、模块化…

Windows Server 2016虚拟机安装教程

一、VMware Workstation虚拟机软件的下载 官网下载入口&#xff1a;​​​​​​Download VMware Workstation Pro - VMware Customer Connect​​​​​ 下载好之后自己看着提示安装软件就好. 二、镜像文件的下载 下载网站入口&#xff1a;MSDN, 我告诉你 - 做一个安静…

【Java EE】Spring核心思想(一)——IOC

文章目录 &#x1f38d;Spring 是什么&#xff1f;&#x1f384;什么是IoC呢&#xff1f;&#x1f338;传统程序开发&#x1f338;传统程序开发的缺陷&#x1f338;如何解决传统程序的缺陷&#xff1f;&#x1f338;控制反转式程序开发&#x1f338;对比总结 &#x1f332;理解…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

MySQL优化表,表的碎片整理和空间回收,清理空间

1.sql -- 查看表占用空间大小。简单查询可以用show table status like blog_visit; select data_length, index_length, data_free, o.* from information_schema.tables o where table_schema in (lishuoboy-navigation) and table_nameblog_visit order by data_length des…

计算机服务器中了rmallox勒索病毒怎么办,rmallox勒索病毒解密流程步骤

在企业的生产运营过程中网络发挥着巨大作用&#xff0c;利用网络可以拓宽市场&#xff0c;提高办公效率&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;但也为企业的数据安全带来隐患。近日&#xff0c;云天数据恢复中心接到多家企业的求助&#xff0c;企业的计算…

使用 Verdaccio 私有化 npm 源指南

使用 Verdaccio 私有化 npm 源指南 使用 Verdaccio 私有化 npm 源指南 介绍什么是 Verdaccio为什么选择 Verdaccio部署 Verdaccio Nodejs 部署 全局局部 Docker 部署云服务商一键部署 注册用户发布私有 npm 包管理 npm 包项目使用私有源 全量切换部分切换 结尾源代码链接 介…

网络篇10 | 网络层 IP

网络篇10 | 网络层 IP 01 简介02 名称解释03 IP报文格式(IPv4)1&#xff09;4位版本协议(version)2&#xff09;4位首部长度(header length)3&#xff09;8位服务类型(Type Of Service, TOS)4&#xff09;16位总长度5&#xff09;16位(分片)标识6&#xff09;3位(分片)标志7&am…

Spring Cloud 集成 RabbitMQ

目录 前言步骤引入相关maven依赖添加相关配置 使用方法配置消息序列化创建第一个消息队列和交换机使用方法 总结 前言 在当今的微服务架构盛行的时代&#xff0c;消息队列作为一种重要的通信机制&#xff0c;在分布式系统中扮演着不可或缺的角色。RabbitMQ&#xff0c;作为一款…

ASP.NET公交车管理系统的实现与设计

摘 要 随着经济的日益增长&#xff0c;信息化时代已经到来&#xff0c;生活中各种信息趋向数字化、清晰化。公交车作为现代城市生活中一种重要的交通工具&#xff0c;其数量增多&#xff0c;车型也不再单一&#xff0c;雇用的司机增多&#xff0c;这样使得公交车公司的车辆信…

XTTS数据迁移方案

前置条件检查 XTTS使用限制较多&#xff0c;V3版本按照本节逐项检查 目标库操作系统不能是windows 源库&#xff1a;redhut 7.9 目标库&#xff1a;redhut 7.9 检查数据库时区&#xff08;两边都需要&#xff09; SQL> select dbtimezone from dual; 检查结果两边都一致…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day 16

Day 16 deep Learning – 鱼与熊掌兼得 最近在减重&#xff0c; 昨天跑了个一公里&#xff0c;然后今天上午又打了个篮球&#xff0c;真是老胳膊老腿了&#xff0c;运动完给我困得不行 Review 见前面的笔记 这里说dl 会提供一个足够大的模型&#xff0c; 来使得Dall loss 足够小…

Unity类银河恶魔城学习记录12-14 p136 Merge Skill Tree with Sword skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections.…

【氮化镓】GaN HEMTs结温和热阻测试方法

文章《Temperature rise detection in GaN high-electron-mobility transistors via gate-drain Schottky junction forward-conduction voltages》&#xff0c;由Xiujuan Huang, Chunsheng Guo, Qian Wen, Shiwei Feng, 和 Yamin Zhang撰写&#xff0c;发表在《Microelectroni…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器&#xff1a;主要用于HDMI线的延长&#xff0c;有HDMI对接头方式延长&#xff0c;或HDMI公头加HDMI母头的HDMI线进行延长&#xff0c;或通过网线方式延长&#xff0c;早期为双网线&#xff0c;目前已发展为单网线&#xff0c;需要注意的是&#xff0…

NLP_知识图谱_图谱问答实战

文章目录 图谱问答NERac自动机实体链接实体消歧 多跳问答neo4j_graph执行流程结构图![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1577c1d9c9e342b3acbf79824aae980f.png)company_data![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/20f567d877c743b…