SQL Server常见基础操作
1. 常见针对表的操作(增删改查)
- --1. Create Table
- USE [MVC_000]
- CREATE TABLE T_TableName
- (
- ID INT IDENTITY(1,1) PRIMARY KEY,
- Name VARCHAR(50) UNIQUE,
- Age INT,
- HomeAddress VARCHAR(50)
- )
- --2. Insert data into table:T_TableName
- INSERT INTO T_TableName(Name,Age,HomeAddress)
- VALUES('Xiao Lin',29,'SD.Road New York')
- --3. Truncate table
- IF OBJECT_ID(N'T_TableName',N'U') IS NOT NULL
- BEGIN
- TRUNCATE TABLE T_TableName
- END
- --4. Delete record
- IF EXISTS(SELECT * FROM T_TableName WHERE ID=1)
- BEGIN
- DELETE T_TableName WHERE ID=1
- END
- --5. Drop table
- IF OBJECT_ID(N'T_TableName',N'U') IS NOT NULL
- BEGIN
- DROP TABLE T_TableName
- END
2. 临时表,表变量及CTE(公用表表达式)的操作
临时表存在于tempdb中,全局临时表以”##“开头。临时表需要手动清除,而CTE和表变量使用完成后会自动清除。
- --1. Temporary table
- --A. Check and delete if current temporary table is exists
- IF OBJECT_ID('TEMPDB..#TempTable') IS NOT NULL
- BEGIN
- DROP TABLE #TempTable
- END
- CREATE TABLE #TempTable
- (
- ID BIGINT,
- FIRST_NAME VARCHAR(50),
- LAST_NAME VARCHAR(50),
- PASSPORT VARCHAR(50),
- GENDER VARCHAR(50),
- BIRTH_DATE DATE,
- STATUS CHAR(1)
- )
- --Insert data
- INSERT INTO TABLE #TempTable
- SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
- --Search
- SELECT * FROM #TempTable
- --B. Or you can use it without definition
- --Insert data
- INSERT INTO TABLE #TempTable
- SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
- --Search
- SELECT * FROM #TempTable
- --2. Define table variables
- --For definine
- DECLARE @TempTable TABLE
- (
- ID BIGINT,
- FIRST_NAME VARCHAR(50),
- LAST_NAME VARCHAR(50),
- PASSPORT VARCHAR(50),
- GENDER VARCHAR(50),
- BIRTH_DATE DATE,
- STATUS CHAR(1)
- )
- --Insert data
- INSERT INTO TABLE @TempTable
- SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
- --Search
- SELECT * FROM @TempTable
- --3. CTE(Common Table Expression)
- ;WITH TestTable AS
- (
- SELECT * FROM [dbo].[TbEmployee] WHERE EmployeeId>10
- )
- SELECT * FROM TestTable
3. 游标操作
- USE [DB_NAME]
- DECLARE CSR_NAME CURSOR FOR
- SELECT Column1,Column2 FROM [dbo].[XXX]
- DECLARE @Column1 INT
- DECLARE @Column2 INT
- OPEN CSR_NAME
- FETCH NEXT FROM CSR_NAME INTO @Column1, @Column2
- WHILE @@FETCH_STATUS = 0
- BEGIN
- IF @Column1>3
- BEGIN
- PRINT('First column is bigger than 3!')
- END
- ELSE IF @Column1=3
- BEGIN
- PRINT('First column is equals 3!')
- END
- ELSE
- BEGIN
- PRINT('First column is less than 3!')
- END
- FETCH NEXT FROM CSR_NAME INTO @Column1, @Column2
- END
- CLOSE CSR_NAME
- DEALLOCATE CSR_NAME
4. 存储过程模板
- USE DBName
- GO
- IF EXISTS ( SELECT * FROM sys.objects WHERE [Name] = 'SP_NAME' AND [Type] = 'P' )
- BEGIN
- DROP PROCEDURE dbo.SP_NAME
- PRINT @@SERVERNAME + ' - ' + CONVERT ( varchar, GETDATE(), 121 ) + ' : ### ' + DB_NAME() + '.dbo.SP_NAME - dropped'
- END
- GO
- /************************************************************************************************************
- Work Request: ProjectName
- Module Name: ModuleName
- Object Name: DB_NAME
- Description:
- Parameters: @XXX1 INT
- @XXX2 INT
- Returns: None
- **************************************************************************************************************
- Version Control:
- Date Version Author WR# Description
- 2020-06-10 1.0 Name ProjectName Create
- *************************************************************************************************************
- Unit Test:
- EXEC dbo.SP_NAME 1,2
- *************************************************************************************************************/
- USE [DB_NAME]
- CREATE PROC [dbo].[SP_NAME]
- --Declare
- @XXX1 INT,
- @XXX2 INT
- AS
- SELECT * FROM dbo.XXX WHERE XXX1=@XXX1 AND XXX2=@XXX2
- GO
5. 函数模板
表值函数:
- --Create
- USE [DB_NAME]
- CREATE FUNCTION BZ_FUNCTION(@Type VARCHAR(1))
- RETURNS @AllInfor TABLE (ID INT,NAME VARCHAR(50))
- AS
- BEGIN
- IF(@Type='A')
- BEGIN
- INSERT @AllInfor VALUES (1,'LI LEI')
- END
- ELSE
- BEGIN
- INSERT @AllInfor VALUES (2,'HAN MEIMEI')
- END
- RETURN
- END
- --Usage
- SELECT * FROM BZ_FUNCTION('A')
内嵌表值函数(实质也是表值函数):
- CREATE FUNCTION IF_GetStudentList(@ClassName VARCHAR(10))
- RETURNS TABLE
- AS
- RETURN (SELECT * FROM Students WHERE ClassName LIKE '%'+@ClassName+'%')
- --For Testing:SELECT * FROM IF_GetStudentList(1)
标量值函数:
- --Create
- USE [DB_NAME]
- CREATE FUNCTION BLZ_FUNCTION(@Type VARCHAR(50))
- RETURNS VARCHAR(20)
- AS
- BEGIN
- DECLARE @Result VARCHAR(20)
- IF(LEN(@Type)>=8)
- BEGIN
- SET @Result='SUCCESSFULL!'
- END
- ELSE
- BEGIN
- SET @Result='Failed!'
- END
- RETURN @Result
- END
- --Usage
- SELECT dbo.BLZ_FUNCTION(XXX.ColumnName) FROM [dbo].[XXX]
为什么只有内嵌表值函数而没有内嵌标量值函数:
表值函数返回一个表的数据,内嵌表值函数可以通过传入不同的参数获取不同的返回值列表;
而标量值返回的是一个值,已经无法对返回结果进行拆分,所以内嵌标量值函数没有任何意义;
6. 触发器模板
Instead Of:
在对数据做DML操作之前,需要对数据进行验证,如果验证失败,则该操作会被取消(这应该就是Instead of的具体体现了吧)。
- --Instead of means that the actual statement will be replaced by the trigger,so the actual statement will not be executed.
- --[Instead trigger] will be executed after the execution of actual statement.
- IF (OBJECT_ID('TRG_STU_INSTEADOF', 'TR') IS NOT NULL)
- BEGIN
- DROP TRIGGER TRG_STU_INSTEADOF
- END
- GO
- CREATE TRIGGER TRG_STU_INSTEADOF
- ON [dbo].[Students]
- INSTEAD OF DELETE
- AS
- DECLARE @ID INT,@StuName VARCHAR(20)
- SELECT @ID=StudentID,@StuName=StudentName FROM deleted
- PRINT 'The delete of students information[ID:'+CONVERT(VARCHAR,@ID)+';Name:'+@StuName+'] is successful!';
- GO
After:
- --By default,the type of trigger is after.(DML)
- --[After trigger] will be executed after the execution of actual statement.
- IF (OBJECT_ID('TRG_STU', 'TR') IS NOT NULL)
- BEGIN
- DROP TRIGGER TRG_STU
- END
- GO
- CREATE TRIGGER TRG_STU
- ON [dbo].[Students]
- FOR INSERT
- AS
- DECLARE @ID INT,@StuName VARCHAR(20)
- SELECT @ID=StudentID,@StuName=StudentName FROM inserted
- PRINT 'The adding for students information[ID:'+CONVERT(VARCHAR,@ID)+';Name:'+@StuName+'] is successful!';
- GO
7. 常见脚本
A. 循环写入测试数据
- DECLARE @ID INT=0
- WHILE @ID<40000
- BEGIN
- INSERT INTO CCTV VALUES ('Johnson','How to insert test data to our DB?',GETDATE(),GETDATE(),0)
- SELECT @ID=MAX(ID) FROM CCTV
- END
B. 评估SQL的执行时间
- USE DBName
- DECLARE @StartTime DateTime,
- @EndTime DateTime
- SET @StartTime=GetDate()
- --Your scripts
- SET @EndTime=GetDate()
- PRINT('Total '+CONVERT(VARCHAR,DATEDIFF(millisecond,@StartTime,@EndTime)) +' milliseconds were used!');
c. 根据一个表更新另一个表的值
- UPDATE TB1
- SET TB1.TB1_Name=TB2.TB2_Name
- FROM dbo.TB1
- LEFT JOIN dbo.TB2 ON TB1.ID=TB2.ID
- WHERE TB1_Name IS NULL
8 . 系统表操作
系统表SYSOBJECTS中的列XTYPE所代表的类型:
- --C:Check约束
- --D:Default约束
- --PK:PRIMARY KEY约束
- --F:FOREIGN KEY约束
- --UQ:UNIQUE约束
- --L:LOG
- --S:SYSTEM TABLES
- --U:User TABLES
- --V:View
- --P:Procedure
- --TF:表值函数
- --IF:内嵌表值函数(在一个函数内部嵌入一个表值函数,也属于表值函数)
- --FN:标量值函数
- --TR:Trigger
- --X:Extension Procedure
- --RF:复制筛选存储过程
常见用法:
- --查询一个表用到的所有触发器:
- SELECT * FROM SYSOBJECTS WHERE xtype='TR' AND parent_obj=OBJECT_ID('Table_Name')
- --查询一个表中所有的列名
- SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Table_Name')
- --查询一个表中所有的列名及数据类型
- SELECT A.Name AS ColumnNAME,B.Name AS DataType FROM SYSCOLUMNS A
- LEFT JOIN SYSTYPES B ON A.XTYPE=B.xtype WHERE A.ID=OBJECT_ID('Table_Name')
- --查询一个表中所有的列名及数据类型(包含表的类型)
- SELECT A.Name AS FieldName,B.Type_Desc,B.Type,C.Name AS TypeName FROM SYS.COLUMNS A
- LEFT JOIN SYS.OBJECTS B ON A.object_id=B.object_id
- LEFT JOIN SYS.TYPES C ON A.system_type_id=C.system_type_id
- WHERE B.type='U' AND CHARINDEX('UDT',C.name,0)<=0 AND CHARINDEX('SYS',C.name,0)<=0 AND B.name='Table_Name'
- --读取数据库对象脚本(Only For View/SP/Function/Trigger)
- SP_HELPTEXT Obj_Name
9. 其他用法
查看SQLServer当前版本号及详细信息:select @@version
查看当前数据库的使用用户:sp_who
结束某个用户对当前数据库的使用:kill spid
SQL Server常见基础操作的更多相关文章
- Sql Server数据库基础
--------------------------------------第一章 Sql Server数据库基础------------------------------------------ ...
- 第一篇——第一文 SQL Server 备份基础
原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- SQL SERVER常见等待——解决会话等待产生的系统问题
SQL SERVER——解决会话等待产生的系统问题 转自: https://blog.csdn.net/z_cloud_for_SQL/article/details/55051215 版权声明:SQ ...
- SQL Server内存遭遇操作系统进程压榨案例
场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...
- SQL Server常见数据类型介绍
数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...
- cmd常用命令 和 sql server相关基础
在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...
- Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)
Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...
随机推荐
- UPnP基本原理介绍
http://blog.csdn.net/braddoris/article/details/41576515 随着计算机产业以及计算机网络技术的迅猛发展,越来越多嵌入式设备的出现和家庭网络的发展,实 ...
- 基于@AspectJ和schema的aop(二)---@AspectJ基础语法
@AspectJ使用jdk5.0和正规的AspectJ切点表达式描述切面, 由于spring只支持方法的连接点,所以Spring只支持部分AspectJ的切点语言. 1.切点表达式函数 AspectJ ...
- Entity Framework 第四篇 优化SQL查询
Expression<Func<TEntity, bool>>与Func<TEntity, bool>的异同 public IList<TEntity> ...
- MySQL日期时间函数大全
DAYOFWEEK(date) 返回日期date是星期几(=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03'); WEEKDAY(date) 返回 ...
- JavaScript 中的Object的使用详解笔记(一)
昨天的学习笔记,今天更新上.第三遍看oop,还是理解的比较到位了. 1.JavaScript的组成:ECMAScript(最新6) + DOM + BOM 2.数组与对象的应用: object的基 ...
- Android各种获取Context方法
首先讲一讲这四个函数的区别,后面还有我对context的一些理解区别如下所示: 原文链接http://stackoverflow.com/questions/6854265/getapplicatio ...
- python学习笔记四 迭代器,生成器,装饰器(基础篇)
迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...
- ecshop商品分类页获取相册列表方法
第1步:找到根目录的category.php文件,查找约:486行左右(注意这不是准确位置,看实际的哦),找到这个函数: /** * 获得分类下的商品 * * @access public * @pa ...
- php5.3之前版本升级至5.3以及更高版本后部分语法简单归纳
1. Deprecated: Assigning the return value of new by reference is deprecated in /usr/local/www/uugui/ ...
- ubuntu下phpstorm无法输入中文的解决办法
http://blog.csdn.net/woshiliulei0/article/details/51657356 今天期待已久的搜狗输入法linux版上线了,对于我们这种之前用习惯了搜狗输入法的屌 ...