SqlServer专题

news2025/5/23 13:54:05

目录

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'

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

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

相关文章

vue-router 原理【详解】hash模式 vs H5 history 模式

hash 模式 【推荐】 路由效果 在不刷新页面的前提下&#xff0c;根据 URL 中的 hash 值&#xff0c;渲染对应的页面 http://test.com/#/login 登录页http://test.com/#/index 首页 核心API – window.onhashchange 监听 hash 的变化&#xff0c;触发视图更新 window.onhas…

黑马 javaweb 实现小案例

黑马 javaweb 实现案例 环境搭建 配置文件代码&#xff1a; spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/demo0413username: rootpassword: 123456mybatis:configuration:#配置mybatis的日志, 指定输出到控制台log-impl…

Java-博客系统(前后端交互)

目录 前言 博客系统基本情况 1 创建项目&#xff0c;引入依赖 2 数据库设计 2.1 分析 2.2 建库建表 3 封装数据库 3.1 在java目录下创建DBUtil类&#xff0c;通过这个类对数据库进行封装 3.2 在java目录下创建实体类&#xff08;博客类Blog&#xff09; 3.2 在java目录下创建…

Python里安装了库却报错找不到是怎么回事?

你在写代码的时候有没有遇到过这样的问题&#xff1a; 明明已经用pip安装好了一个Python模块&#xff0c; 但当你在代码中使用时&#xff0c;却给你报错说找不到这个库。 出现这种情况&#xff0c;绝大多数都是因为你安装模块的那个pip&#xff0c;和你执行代码时的python&…

机器学习—特征预处理和降维(四)

什么是特征预处理&#xff1f; 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 1包含内容 数值型数据的无量纲化&#xff1a; 归一化标准化 2特征预处理API sklearn. preprocessing为什么要进行归一化 or 标准化&#xff1f; 特征的单位或者大小相差较大…

UDP实现Mini版在线聊天室

实现原理 只有当客户端先对服务器发送online消息的时候&#xff0c;服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候&#xff0c;服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时&#xff0c;表明自己要下线了&#xff0c;此时服务器把该用…

keil参数删除后补写没有代码提示

代码提示快捷键 ctrlalt空格 如果按了之后没有提示&#xff0c;那说明跟输入法的快捷键冲突了。

C++引用和右值引用

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

【vue】toRef,toRefs

toRef&#xff1a;把一个 响应式对象 转换为对应的ref变量toRefs&#xff1a;把一个 响应式对象 转换为对应的ref对象 代码 <template><P>mname: {{ mname }} </P><P>mage: {{ mage }} </P><P>msex: {{ msex }} </P><P>mhobb…

c语言中<string.h>的strstr与strtok函数

c语言中string.h的strstr与strtok函数 代码运行结果 代码 #include <stdio.h> #include <string.h>///1.在字符串str1里面,查找第一次出现str2的位置 //char * strstr(const char * str1,const char * str2)///2.sep为分割符,根据分割符来对str进行分割 //char * …

【计算机毕业设计】基于Java+SSM的实战开发项目150套(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享150的Java毕业设计&#xff0c;基于ssm框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设计和课程…

轻量级 S3 协议存储客户端

目前大家一般不会把二进制文件直接放在应用服务器上&#xff0c;而是存在“对象存储”的方案中&#xff0c;例如亚马逊的 AWS&#xff0c;阿里云的 OSS、Cloudflare R2 等。AWS 为最早的始作俑者&#xff0c;因此其 S3 协议也近乎标准化&#xff0c;各大厂商的对象存储方案都实…

苹果全力升级:用专注AI的M4芯片彻底改造Mac系列

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

vue3+elment复杂详情页面打开后,再打开其他页面都显示空白,控制台也没什么特殊报错

页面使用了el-tabs 、 el-tab-pane、el-table 等标签 但是经测试不是这些问题导致的 js也使用了onMounted &#xff0c;但是除掉也时空白页面 反正之前人写的页面可乱&#xff0c;尤其是js这块&#xff0c;穿插引用import一大堆 主题页面样式布局如下 最后看到页面代码太乱…

funasr 麦克风实时流语音识别;模拟vad检测单独输出完整每句话

参考: https://github.com/alibaba-damo-academy/FunASR chunk_size 是用于流式传输延迟的配置。[0,10,5] 表示实时显示的粒度为 1060=600 毫秒,并且预测的向前信息为 560=300 毫秒。每个推理输入为 600 毫秒(采样点为 16000*0.6=960),输出为相应的文本。对于最后一个语音…

【树莓派初始化】教你从0开始搭建树莓派的使用环境

文章目录 前言1.什么是树莓派&#xff1f;1.1什么用户适合购买树莓派学习编程&#xff1f; 2.如何初始化一个树莓派2.1 烧录系统2.2 测试开机2.3 设置树莓派显示输出的分辨率2.4 网络链接2.5 Putty链接树莓派2.6 VNC链接树莓派2.7 使用filezilla软件传输文件到树莓派 3.使用Xsh…

从 0 搭建公司Jenkins服务 Centos7

从 0 搭建公司Jenkins服务 Centos7 安装 (运维人员) 安装环境 配置DNS安装JDK17安装Jenkins安装Docker安装GIT安装Ansible启动Jenkins安装插件配置凭据配置共享库配置 (开发经理)使用 (开发、测试人员) 安装 (运维人员) 安装环境 配置DNS 新安装系统的服务器无法解析域名&a…

【数据结构】二叉爆炸

【数据结构】二叉爆炸 按照惯例整点抽象的&#xff0c;贴上这篇博客的名字由来&#xff1a; 言归正传&#xff0c;本篇博客介绍二叉树的构造方式、前中后序遍历、层序遍历以及代码随想录中二叉树章节的相关题目&#xff1a; 代码随想录 (programmercarl.com) 一、啥是二叉树 …

【150套】基于SSM框架的Java毕业设计开发实战项目(附源码+演示视频+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享150的Java毕业设计&#xff0c;基于ssm框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设计和课程…

服务器docker应用一览

文章目录 一、需求概况二、业务流程三、运行效果四、实现过程1. 基础前提2. 源码放送3.核心代码4. 项目打包5.部署步骤 一、需求概况 现有某云主机服务器&#xff0c;用来做项目演示用&#xff0c;上面运行了docker应用&#xff0c;现希望有一总览页面&#xff0c;用来展示部署…