1. 常见针对表的操作(增删改查)

  1. --1. Create Table
  2. USE [MVC_000]
  3. CREATE TABLE T_TableName
  4. (
  5. ID INT IDENTITY(1,1) PRIMARY KEY,
  6. Name VARCHAR(50) UNIQUE,
  7. Age INT,
  8. HomeAddress VARCHAR(50)
  9. )
  10.  
  11. --2. Insert data into table:T_TableName
  12. INSERT INTO T_TableName(Name,Age,HomeAddress)
  13. VALUES('Xiao Lin',29,'SD.Road New York')
  14.  
  15. --3. Truncate table
  16. IF OBJECT_ID(N'T_TableName',N'U') IS NOT NULL
  17. BEGIN
  18. TRUNCATE TABLE T_TableName
  19. END
  20.  
  21. --4. Delete record
  22. IF EXISTS(SELECT * FROM T_TableName WHERE ID=1)
  23. BEGIN
  24. DELETE T_TableName WHERE ID=1
  25. END
  26.  
  27. --5. Drop table
  28. IF OBJECT_ID(N'T_TableName',N'U') IS NOT NULL
  29. BEGIN
  30. DROP TABLE T_TableName
  31. END

2. 临时表,表变量及CTE(公用表表达式)的操作

临时表存在于tempdb中,全局临时表以”##“开头。临时表需要手动清除,而CTE和表变量使用完成后会自动清除。

  1. --1. Temporary table
  2. --A. Check and delete if current temporary table is exists
  3. IF OBJECT_ID('TEMPDB..#TempTable') IS NOT NULL
  4. BEGIN
  5. DROP TABLE #TempTable
  6. END
  7. CREATE TABLE #TempTable
  8. (
  9. ID BIGINT,
  10. FIRST_NAME VARCHAR(50),
  11. LAST_NAME VARCHAR(50),
  12. PASSPORT VARCHAR(50),
  13. GENDER VARCHAR(50),
  14. BIRTH_DATE DATE,
  15. STATUS CHAR(1)
  16. )
  17. --Insert data
  18. INSERT INTO TABLE #TempTable
  19. SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
  20. --Search
  21. SELECT * FROM #TempTable
  22.  
  23. --B. Or you can use it without definition
  24. --Insert data
  25. INSERT INTO TABLE #TempTable
  26. SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
  27. --Search
  28. SELECT * FROM #TempTable
  29.  
  30. --2. Define table variables
  31. --For definine
  32. DECLARE @TempTable TABLE
  33. (
  34. ID BIGINT,
  35. FIRST_NAME VARCHAR(50),
  36. LAST_NAME VARCHAR(50),
  37. PASSPORT VARCHAR(50),
  38. GENDER VARCHAR(50),
  39. BIRTH_DATE DATE,
  40. STATUS CHAR(1)
  41. )
  42. --Insert data
  43. INSERT INTO TABLE @TempTable
  44. SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
  45. --Search
  46. SELECT * FROM @TempTable
  47.  
  48. --3. CTE(Common Table Expression)
  49. ;WITH TestTable AS
  50. (
  51. SELECT * FROM [dbo].[TbEmployee] WHERE EmployeeId>10
  52. )
  53.  
  54. SELECT * FROM TestTable

3. 游标操作

  1. USE [DB_NAME]
  2.  
  3. DECLARE CSR_NAME CURSOR FOR
  4. SELECT Column1,Column2 FROM [dbo].[XXX]
  5.  
  6. DECLARE @Column1 INT
  7. DECLARE @Column2 INT
  8.  
  9. OPEN CSR_NAME
  10. FETCH NEXT FROM CSR_NAME INTO @Column1, @Column2
  11. WHILE @@FETCH_STATUS = 0
  12. BEGIN
  13.  
  14. IF @Column1>3
  15. BEGIN
  16. PRINT('First column is bigger than 3!')
  17. END
  18. ELSE IF @Column1=3
  19. BEGIN
  20. PRINT('First column is equals 3!')
  21. END
  22. ELSE
  23. BEGIN
  24. PRINT('First column is less than 3!')
  25. END
  26. FETCH NEXT FROM CSR_NAME INTO @Column1, @Column2
  27. END
  28. CLOSE CSR_NAME
  29. DEALLOCATE CSR_NAME

4. 存储过程模板

  1. USE DBName
  2. GO
  3. IF EXISTS ( SELECT * FROM sys.objects WHERE [Name] = 'SP_NAME' AND [Type] = 'P' )
  4. BEGIN
  5. DROP PROCEDURE dbo.SP_NAME
  6. PRINT @@SERVERNAME + ' - ' + CONVERT ( varchar, GETDATE(), 121 ) + ' : ### ' + DB_NAME() + '.dbo.SP_NAME - dropped'
  7. END
  8. GO
  9. /************************************************************************************************************
  10. Work Request: ProjectName
  11. Module Name: ModuleName
  12. Object Name: DB_NAME
  13. Description:
  14. Parameters: @XXX1 INT
  15. @XXX2 INT
  16. Returns: None
  17. **************************************************************************************************************
  18. Version Control:
  19. Date Version Author WR# Description
  20. 2020-06-10 1.0 Name ProjectName Create
  21. *************************************************************************************************************
  22. Unit Test:
  23. EXEC dbo.SP_NAME 1,2
  24. *************************************************************************************************************/
  25. USE [DB_NAME]
  26. CREATE PROC [dbo].[SP_NAME]
  27. --Declare
  28. @XXX1 INT,
  29. @XXX2 INT
  30. AS
  31.  
  32. SELECT * FROM dbo.XXX WHERE XXX1=@XXX1 AND XXX2=@XXX2
  33. GO

5. 函数模板

表值函数:

  1. --Create
  2. USE [DB_NAME]
  3. CREATE FUNCTION BZ_FUNCTION(@Type VARCHAR(1))
  4. RETURNS @AllInfor TABLE (ID INT,NAME VARCHAR(50))
  5. AS
  6.  
  7. BEGIN
  8. IF(@Type='A')
  9. BEGIN
  10. INSERT @AllInfor VALUES (1,'LI LEI')
  11. END
  12. ELSE
  13. BEGIN
  14. INSERT @AllInfor VALUES (2,'HAN MEIMEI')
  15. END
  16. RETURN
  17. END
  18.  
  19. --Usage
  20. SELECT * FROM BZ_FUNCTION('A')

内嵌表值函数(实质也是表值函数):

  1. CREATE FUNCTION IF_GetStudentList(@ClassName VARCHAR(10))
  2. RETURNS TABLE
  3. AS
  4. RETURN (SELECT * FROM Students WHERE ClassName LIKE '%'+@ClassName+'%')
  5. --For Testing:SELECT * FROM IF_GetStudentList(1)

标量值函数:

  1. --Create
  2. USE [DB_NAME]
  3. CREATE FUNCTION BLZ_FUNCTION(@Type VARCHAR(50))
  4. RETURNS VARCHAR(20)
  5. AS
  6.  
  7. BEGIN
  8. DECLARE @Result VARCHAR(20)
  9. IF(LEN(@Type)>=8)
  10. BEGIN
  11. SET @Result='SUCCESSFULL!'
  12. END
  13. ELSE
  14. BEGIN
  15. SET @Result='Failed!'
  16. END
  17. RETURN @Result
  18. END
  19.  
  20. --Usage
  21. SELECT dbo.BLZ_FUNCTION(XXX.ColumnName) FROM [dbo].[XXX]

为什么只有内嵌表值函数而没有内嵌标量值函数:
表值函数返回一个表的数据,内嵌表值函数可以通过传入不同的参数获取不同的返回值列表;
而标量值返回的是一个值,已经无法对返回结果进行拆分,所以内嵌标量值函数没有任何意义;

6. 触发器模板

Instead Of:

在对数据做DML操作之前,需要对数据进行验证,如果验证失败,则该操作会被取消(这应该就是Instead of的具体体现了吧)。

  1. --Instead of means that the actual statement will be replaced by the trigger,so the actual statement will not be executed.
  2. --[Instead trigger] will be executed after the execution of actual statement.
  3. IF (OBJECT_ID('TRG_STU_INSTEADOF', 'TR') IS NOT NULL)
  4. BEGIN
  5. DROP TRIGGER TRG_STU_INSTEADOF
  6. END
  7. GO
  8.  
  9. CREATE TRIGGER TRG_STU_INSTEADOF
  10. ON [dbo].[Students]
  11. INSTEAD OF DELETE
  12. AS
  13. DECLARE @ID INT,@StuName VARCHAR(20)
  14. SELECT @ID=StudentID,@StuName=StudentName FROM deleted
  15. PRINT 'The delete of students information[ID:'+CONVERT(VARCHAR,@ID)+';Name:'+@StuName+'] is successful!';
  16. GO

After:

  1. --By default,the type of trigger is after.(DML)
  2. --[After trigger] will be executed after the execution of actual statement.
  3. IF (OBJECT_ID('TRG_STU', 'TR') IS NOT NULL)
  4. BEGIN
  5. DROP TRIGGER TRG_STU
  6. END
  7. GO
  8. CREATE TRIGGER TRG_STU
  9. ON [dbo].[Students]
  10. FOR INSERT
  11. AS
  12. DECLARE @ID INT,@StuName VARCHAR(20)
  13. SELECT @ID=StudentID,@StuName=StudentName FROM inserted
  14. PRINT 'The adding for students information[ID:'+CONVERT(VARCHAR,@ID)+';Name:'+@StuName+'] is successful!';
  15. GO

7. 常见脚本

  A. 循环写入测试数据

  1. DECLARE @ID INT=0
  2. WHILE @ID<40000
  3. BEGIN
  4. INSERT INTO CCTV VALUES ('Johnson','How to insert test data to our DB?',GETDATE(),GETDATE(),0)
  5. SELECT @ID=MAX(ID) FROM CCTV
  6. END

  B. 评估SQL的执行时间

  1. USE DBName
  2. DECLARE @StartTime DateTime,
  3. @EndTime DateTime
  4. SET @StartTime=GetDate()
  5. --Your scripts
  6. SET @EndTime=GetDate()
  7. PRINT('Total '+CONVERT(VARCHAR,DATEDIFF(millisecond,@StartTime,@EndTime)) +' milliseconds were used!');

  c. 根据一个表更新另一个表的值

  1. UPDATE TB1
  2. SET TB1.TB1_Name=TB2.TB2_Name
  3. FROM dbo.TB1
  4. LEFT JOIN dbo.TB2 ON TB1.ID=TB2.ID
  5. WHERE TB1_Name IS NULL

8 . 系统表操作

系统表SYSOBJECTS中的列XTYPE所代表的类型:

  1. --C:Check约束
  2. --D:Default约束
  3. --PK:PRIMARY KEY约束
  4. --F:FOREIGN KEY约束
  5. --UQ:UNIQUE约束
  6.  
  7. --L:LOG
  8.  
  9. --S:SYSTEM TABLES
  10. --U:User TABLES
  11. --V:View
  12. --P:Procedure
  13. --TF:表值函数
  14. --IF:内嵌表值函数(在一个函数内部嵌入一个表值函数,也属于表值函数)
  15. --FN:标量值函数
  16. --TR:Trigger
  17.  
  18. --X:Extension Procedure
  19. --RF:复制筛选存储过程

常见用法:

  1. --查询一个表用到的所有触发器:
  2. SELECT * FROM SYSOBJECTS WHERE xtype='TR' AND parent_obj=OBJECT_ID('Table_Name')
  3.  
  4. --查询一个表中所有的列名
  5. SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Table_Name')
  6.  
  7. --查询一个表中所有的列名及数据类型
  8. SELECT A.Name AS ColumnNAME,B.Name AS DataType FROM SYSCOLUMNS A
  9. LEFT JOIN SYSTYPES B ON A.XTYPE=B.xtype WHERE A.ID=OBJECT_ID('Table_Name')
  10.  
  11. --查询一个表中所有的列名及数据类型(包含表的类型)
  12. SELECT A.Name AS FieldName,B.Type_Desc,B.Type,C.Name AS TypeName FROM SYS.COLUMNS A
  13. LEFT JOIN SYS.OBJECTS B ON A.object_id=B.object_id
  14. LEFT JOIN SYS.TYPES C ON A.system_type_id=C.system_type_id
  15. WHERE B.type='U' AND CHARINDEX('UDT',C.name,0)<=0 AND CHARINDEX('SYS',C.name,0)<=0 AND B.name='Table_Name'
  16.  
  17. --读取数据库对象脚本(Only For View/SP/Function/Trigger)
  18. SP_HELPTEXT Obj_Name

9. 其他用法

查看SQLServer当前版本号及详细信息:select @@version

查看当前数据库的使用用户:sp_who

结束某个用户对当前数据库的使用:kill spid

SQL Server常见基础操作的更多相关文章

  1. Sql Server数据库基础

    --------------------------------------第一章  Sql Server数据库基础------------------------------------------ ...

  2. 第一篇——第一文 SQL Server 备份基础

    原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...

  3. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  4. SQL SERVER常见等待——解决会话等待产生的系统问题

    SQL SERVER——解决会话等待产生的系统问题 转自: https://blog.csdn.net/z_cloud_for_SQL/article/details/55051215 版权声明:SQ ...

  5. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  6. SQL Server常见数据类型介绍

    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...

  7. cmd常用命令 和 sql server相关基础

    在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...

  8. Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)

    Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...

  9. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

随机推荐

  1. UPnP基本原理介绍

    http://blog.csdn.net/braddoris/article/details/41576515 随着计算机产业以及计算机网络技术的迅猛发展,越来越多嵌入式设备的出现和家庭网络的发展,实 ...

  2. 基于@AspectJ和schema的aop(二)---@AspectJ基础语法

    @AspectJ使用jdk5.0和正规的AspectJ切点表达式描述切面, 由于spring只支持方法的连接点,所以Spring只支持部分AspectJ的切点语言. 1.切点表达式函数 AspectJ ...

  3. Entity Framework 第四篇 优化SQL查询

    Expression<Func<TEntity, bool>>与Func<TEntity, bool>的异同 public IList<TEntity> ...

  4. MySQL日期时间函数大全

    DAYOFWEEK(date) 返回日期date是星期几(=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03'); WEEKDAY(date) 返回 ...

  5. JavaScript 中的Object的使用详解笔记(一)

    昨天的学习笔记,今天更新上.第三遍看oop,还是理解的比较到位了.   1.JavaScript的组成:ECMAScript(最新6) + DOM + BOM 2.数组与对象的应用: object的基 ...

  6. Android各种获取Context方法

    首先讲一讲这四个函数的区别,后面还有我对context的一些理解区别如下所示: 原文链接http://stackoverflow.com/questions/6854265/getapplicatio ...

  7. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  8. ecshop商品分类页获取相册列表方法

    第1步:找到根目录的category.php文件,查找约:486行左右(注意这不是准确位置,看实际的哦),找到这个函数: /** * 获得分类下的商品 * * @access public * @pa ...

  9. php5.3之前版本升级至5.3以及更高版本后部分语法简单归纳

    1. Deprecated: Assigning the return value of new by reference is deprecated in /usr/local/www/uugui/ ...

  10. ubuntu下phpstorm无法输入中文的解决办法

    http://blog.csdn.net/woshiliulei0/article/details/51657356 今天期待已久的搜狗输入法linux版上线了,对于我们这种之前用习惯了搜狗输入法的屌 ...