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 ,否则为false
 if (exists(select * from ScoreList  where SQLServerDB<60))
 print '存在未及格同学'
 else
 print '全部合格'
 
 --Exists反向查询 :Not Exists
 if(not exists(select * from ScoreList where SQLServerDB<60))
 print '全部合格'
 else
 print '存在未及格同学'

4,控制语句

1.判断语句

 declare @len int
 set @len=4
 if(@len%2=1)
	begin
		print '奇数'
	end
 else
	begin
		print '偶数'
	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)
	begin
		set @count=(select COUNT(*) from ScoreList where CSharp<60)
		if(@count=0)
			break
		select @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_View
 go
 create view My_View
 as
	select top 100 ScoreList.StudentId,StudentName,CSharp from ScoreList 
	join Students
	on ScoreList.StudentId=Students.StudentId	
	order by CSharp
 go

3.调用视图。

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

4.视图注意事项。

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

6,事务

 --transaction事务使用
 --定义一个变量承接执行sql语句时可能产生的异常(通过@@Error获取实时异常代码)
 declare @errorSum int =0
 --开始事务
 begin tran
	begin
		delete from Students where StudentId=100094
		--获取执行语句可能产生的异常代码值
		set @errorSum=@errorSum+@@ERROR
		delete from StudentClass where ClassId=1
		set @errorSum=@errorSum+@@ERROR
		if(@errorSum>0)
			begin
			--出现异常,进行回滚
			rollback tran
			end
		else
			--无异常,提交事务
			commit tran
	end 
	
 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
                .......
AS
        SQL 语句
GO

带默认值得参数使用
以存储过程名为usp_MyProc为例


--带有默认参数的存储过程
 if(exists(select * from sysobjects where name='usp_MyProc'))
 drop proc usp_MyProc
 go
 create proc usp_MyProc
 --带有默认值的参数格式为 变量名 类型=默认值
 @Id int=100000,@name varchar(20)=''
 as
 select * from ScoreList where StudentId=@Id
 select * from Students where StudentName=@name
 go


 --调用带有默认值得存储过程
 --方式1 
 exec usp_MyProc
 --方式2
 exec usp_MyProc 100001,'张三'
 --方式3
 exec usp_MyProc default,'张三'
 --方式4
 exec usp_MyProc @name='张三'
--使用带有output声明的形参作为结果输出接口
 --分析学员成绩的存储过程
 if(exists(select * from sysobjects where name='usp_queryScore'))
 drop proc usp_queryScore
 go
 create proc usp_queryScore 
 @className varchar(20),@total int output,@miss int output,@csharp  float output,@db float output
 as
	--判断@classname是否为空
	if(LEN(@className)=0)
	begin
		select Students.StudentId,StudentName,Gender,ClassName,PhoneNumber,CSharp,SQLServerDB from ScoreList
		join Students
		on ScoreList.StudentId=Students.StudentId
		join StudentClass
		on StudentClass.ClassId=Students.ClassId
		select @total=COUNT(*),@csharp=SUM(CSharp)*1.0/COUNT(*),@db=AVG(SQLServerDB) from ScoreList
		select @miss=COUNT(*) from Students where StudentId not in (select StudentId from ScoreList)
		--缺考人员列表
		select StudentName from Students where StudentId not in (select StudentId from ScoreList) 
		
	end
	else
	begin
	--显示列表
	
		select Students.StudentId,StudentName,Gender,ClassName,PhoneNumber,CSharp,SQLServerDB from ScoreList
		join Students
		on ScoreList.StudentId=Students.StudentId
		join StudentClass
		on StudentClass.ClassId=Students.ClassId
		where ClassName=@className
	--该班级总参加人数
	--declare @className varchar(20)='软件1班'
	
		select @total=COUNT(*),@csharp=SUM(CSharp)*1.0/COUNT(*),@db=AVG(SQLServerDB) from ScoreList 
		join Students
		on ScoreList.StudentId=Students.StudentId
		inner join StudentClass
		on Students.ClassId=StudentClass.ClassId
		where 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)
	end
	
 go
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'

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java高阶私房菜:快速学会异步编程CompletableFuture

为了使主程代码不受阻塞之苦&#xff0c;一般使用异步编程&#xff0c;而异步编程架构在JDK1.5便已有了雏形&#xff0c;主要通过Future和Callable实现&#xff0c;但其操作方法十分繁琐&#xff0c;想要异步获取结果,通常要以轮询的方式去获取结果&#xff0c;具体如下&#x…

电脑开不了机?不要慌,三招教你快速解决!

电脑开不了机是我们在日常使用中可能遇到的一个严重问题&#xff0c;它会影响我们的工作和生活。了解如何解决电脑开不了机的问题对于维护电脑正常运行至关重要。本文将介绍三种常见的解决电脑开不了机的方法&#xff0c;帮助您快速恢复电脑的正常使用。 方法1&#xff1a;检查…

Java实现生成中间带图标的二维码

Java实现生成中间带图标的二维码 生成Base64格式的二维码&#xff0c;返回html渲染 package your.package;import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcod…

flask 应用程序

flask 程序示例 创建 hello.py 文件&#xff1a; # 导入 Flask 模块。Flask 类的一个对象是 wsgi 应用程序。 from flask import Flask# 创建app对象, Flask构造函数将当前模块的名称(__name__)作为参数。 app Flask(__name__)# route() 函数是一个装饰器&#xff0c;它告诉应…

Linux上安装mysql指南

最近入职了新单位&#xff0c;申请到了一台cvm。我这个机子是redhat的linux发行版&#xff0c;就用rpm包安装工具就行。下面把我趟过的一些坑写在这里&#xff0c;希望对您有帮助。 一开始&#xff0c;我自己下载了安装包&#xff0c;装了一个这个社区版的&#xff0c;rpm -qa…

鸿蒙入门05-真机运行“遥遥领先”

如果你有一台真的 "遥遥领先"那么是可以直接在手机上真机运行你的项目的我们也来尝试一下运行 一、手机设置开发者模式 打开手机设置 打开手机设置界面 向下滑动到关于手机位置 快速连续点击版本号位置 下图所示位置快速连续点击 打开 3 - 5 次即可 会提示您已经进…

【R语言】动画图:散点图

绘制成如下的散点图&#xff1a; 如果数据量大&#xff0c;有多个年份&#xff0c;就会生成多张图&#xff0c;例如&#xff1a; 具体代码如下&#xff1a; library(gapminder)#加载 gapminder 包&#xff0c;其中包含了从 1952 年至 2007 年各个国家的 GDP、预期寿命和人口数据…

目标检测——鱼类数据集

一、重要性及意义 生物多样性保护与监测&#xff1a; 鱼类识别是生物多样性保护工作的关键一环。通过准确识别不同种类的鱼类&#xff0c;科学家能够更好地了解它们的分布、种群数量以及栖息地状况&#xff0c;从而制定更为有效的保护措施。鱼类是水域生态系统的重要组成部分…

通过阿里云向量检索 Milvus 版和通义千问快速构建基于专属知识库的问答系统

背景介绍 阿里云向量检索 Milvus 版是一款 Serverless 全托管服务&#xff0c;确保了与开源 Milvus 的完全兼容性&#xff0c;并支持无缝迁移。它在开源版本的基础上增强了可扩展性&#xff0c;能提供大规模 AI 向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力…

基于百度文心大模型全面重构,小度正式推出AI原生操作系统DuerOS X

4月16日&#xff0c;以“创造未来”为主题的2024百度Create AI开发者大会在深圳举办。百度集团副总裁、小度科技CEO李莹正式发布了小度新一代操作系统DuerOS X&#xff0c;该操作系统是小度基于百度文心大模型推出的全球首个AI原生操作系统。李莹表示&#xff1a;“作为⽂⼼⼤模…

ChatGPT与Python-GEE融合,遥感云大数据分析、管理与可视化

掌握Earth Engine的实际应用能力&#xff0c;以Python为基础&#xff0c;结合实例讲解平台搭建、影像数据分析、经典应用案例、本地与云端数据管理&#xff0c;以及云端数据论文出版级可视化等技能。 为提高教学质量&#xff0c;将融入ChatGPT 4、Claude Opus、Gemini、文心一…

读《SQL基础教程 第二版 上》的一些总结

1. 数据库语言 DDL: Data Definition Language&#xff0c;数据定义语言&#xff08;库、表的操作&#xff09; DML: Data Manipulation Language&#xff0c; 数据操控语言&#xff08;对表中数据的增删改&#xff09; DQL: Data Query Language&#xff0c;数据库查询语言…

SAP是什么?SAP介绍

一、概述 ​SAP,为“System Applications and Products”的简称,是SAP公司的产品——企业管理解决方案的软件名称。​ SAP含义 第一,SAP是公司名称,即SAP公司(纽交所代码:SAP),它是成立于1972年总部位于德国沃尔多夫市的全球最大的企业管理和协同化电子商务解决方案…

SpringBoot多数据源(一)

SpringBoot多数据源&#xff08;一&#xff09; 1.多数据源使用场景1.1 业务复杂&#xff08;数据量大&#xff09;1.2 读写分离 2.多数据源配置3.应用4.测试 1.多数据源使用场景 1.1 业务复杂&#xff08;数据量大&#xff09; 简单理解就是业务量复杂&#xff0c;将庞大的数…

UML/SysML建模工具更新情况-截至2024年4月(1)5款-Trufun建模平台 v2024

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 工具最新版本&#xff1a;itemis CREATE 5.2.2 更新时间 2024年3月22日 工具简介 原名YAKINDU Statechart Tools。状态机建模工具&#xff0c;支持各种语言的代码生成&#xff0c;提…

1000kW 柴油发电机组测试负载箱的核心功能

随着科技的不断发展&#xff0c;电力系统的稳定性和安全性日益受到重视。柴油发电机组作为一种重要的备用电源设备&#xff0c;其性能和可靠性直接关系到电力系统的稳定运行。为了确保柴油发电机组的性能和可靠性&#xff0c;对其进行定期的检测和维护是必不可少的。 在这个过程…

电磁仿真--基本操作-CST-(1)

目录 1. 开启-备忘 2. 从调用最简单的Dipole天线开始 2.1 查找示例 2.2 运行示例 2.3 进度与消息 2.4 查看结果 2.4.1 Port signals 2.4.2 S-Parameter 2.4.3 Reference Impedance 2.4.4 Balance 2.4.5 Power 2.4.6 Energy 2.4.7 Discrete Ports 2.4.8 2D/3D Res…

Spring Boot后端+Vue前端:打造高效二手车交易系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

Linux服务器硬件及RAID配置

一、服务器硬件 塔式服务器&#xff1a;最初的服务器形态之一&#xff0c;类似于传统的台式电脑&#xff0c;但具有更强的处理能力和稳定性&#xff0c;适合小型企业或部门使用。 机架式服务器&#xff1a;设计为可安装在标准化机架内的模块化单元&#xff0c;可以有效地节省空…

好用的AI绘画工具,5个一键AI自动生成绘画推荐

在数字时代&#xff0c;AI绘画软件开启了人们展现创意的全新篇章。如果你对AI一键生成绘画的感兴趣&#xff0c;那就跟着我一起来了解一下吧&#xff01; 1.爱制作AI 爱制作AI是一款功能强大的人工智能软件&#xff0c;它不仅拥有超强的AI问答能力&#xff0c;还能轻松搞定绘画…