博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于sql server 的那些事
阅读量:6576 次
发布时间:2019-06-24

本文共 3854 字,大约阅读时间需要 12 分钟。

     最近一直在忙着导数据,写着各种对应的sql,在导数据中遇到形形色色的问题。有些东西很久没有使用,大部分都遗忘的差不多了,真是好不容易抽个时间来进行梳理一下。

   一、临时表:

     SQL SERVER 中创建临时表,临时表有两种类型,一个是本地临时表:以#开头,本地临时表仅在当前会话中可见;;另一个就是全局临时表,以##开头,全局临时表在所有会话中都可见。  with 开头的临时表,只能在括号后中使用,一般针对条件比较复杂的条件,或者排序,会经常会使用到的,生命周期就是这句话结束后就会释放。而上面两种以#和##开头的需要手动释放资源, 形式如下:

1 ---临时表 2 CREATE TABLE #Temp 3     ( 4       ID INT , 5       Name NVARCHAR(50) , 6       Age INT 7     ); 8  9 ---全局临时表10 CREATE TABLE ##TempAll11     (12       ID INT ,13       Name NVARCHAR(50) ,14       Age INT ,15       UID INT16     );17 18 ----with开头的临时表19 WITH    t AS ( SELECT   a.ID ,20                         a.Name21                FROM     #Temp AS a22                         INNER JOIN ##TempAll AS b ON b.ID = b.UID23              )24     SELECT  *25     FROM    t;26 27 ---释放临时表28 DROP TABLE #Temp;29 DROP TABLE ##TempAll;

  二、解析,编译sql

      针对导数据时,写了一堆sql,不敢轻易执行,最好执行前先解析,编译,是否存在问题。在SQL SERVER中提供 SET PARSEONLY { ON | OFF }   和SET NOEXEC { ON | OFF }   语句。

      SET  PARSEONLY 表示只解析但不编译或执行语句。它会检查Tansact-SQL语句的语法并返回任何错误信息。 SET  PARSEONLY on 开始分析语句,OFF 开始编译执行语句。

      SET NOEXEC 表示编译但不执行语句。可以让 SQL Server 在执行 Transact-SQL 代码时,验证代码中的语法和对象名。它也可以用于调试通常是较大的批处理中的部分语句。

---解析SET PARSEONLY ON; GO-----检查的语句SELECT  *FROM    ##TempAll;        ---编译执行SET PARSEONLY OFF;GO--------------------------------------------编译SET NOEXEC ON;GO----编译的语句SELECT  *FROM    dbo.S_SJZD;GO -----开始编译执行SET NOEXEC OFF; GO

  三、去重

    导数据时经常会遇到各种重复数据,去重也是重要的一环。常用的去重方法,我只道三种,1)DISTINCT;2)GROUPY BY ;3) ROW_NUMBER() OVER  排序去重。每一种都有各自的优缺点。

 

-------去重----1.DISTINCTSELECT DISTINCT        NameFROM    #Temp;----2.Group By 去重SELECT  NameFROM    #TempGROUP BY NameHAVING  COUNT(Name) > 1;---3.排序去重WITH    t AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name DESC ) AS a ,                        *               FROM     #Temp             )    SELECT  *    FROM    t    WHERE   a = 1;

  四、事务

     事务四大特性:原子性、一致性、隔离性以及持久性。Transact-SQL 中主要语法 1 开始事务: begin transaction ;2 提交事务:commit transaction ;3 回滚事务: rollback transaction。

1 CREATE TABLE #Temp 2         ( 3           ID INT , 4           Name NVARCHAR(50) , 5           Age INT 6         ); 7       8      INSERT INTO #Temp 9              ( ID, Name, Age )10      VALUES  ( 1, -- ID - int11                N'www', -- Name - nvarchar(50)12                100  -- Age - int13                )14      15      INSERT INTO #Temp16              ( ID, Name, Age )17      VALUES  ( 2, -- ID - int18                N'jjj', -- Name - nvarchar(50)19                10  -- Age - int20                )21         --开始事务22     BEGIN TRANSACTION tran_bank;23     DECLARE @tran_error INT;24     SET @tran_error = 0;25 26     -----try catch27     BEGIN TRY28     INSERT INTO #Temp29              ( ID, Name, Age )30      VALUES  ( 'w', -- ID - int31                N'jjj', -- Name - nvarchar(50)32                10  -- Age - int33                )34   SET @tran_error = @tran_error + @@error;  35         UPDATE  #Temp36         SET     Age = Name - 1000037         WHERE   ID = 2;        38         SET @tran_error = @tran_error + @@error;     39         UPDATE  #Temp40         SET     Age = Age + 1000041         WHERE   ID = 1;      42         SET @tran_error = @tran_error + @@error;43         PRINT @tran_error44     END TRY45     BEGIN CATCH        46         PRINT '出现异常,错误编号:' + CONVERT(VARCHAR, ERROR_NUMBER()) + ', 错误消息:'47             + ERROR_MESSAGE(); 48         SET @tran_error = @tran_error + 1;49         GOTO Lend;50 51     END CATCH;52 53 -------goto 54 Lend:55    BEGIN 56      PRINT 'aaaa';57    END58 59 60     IF ( @tran_error > 0 )61         BEGIN62         --执行出错,回滚事务63             ROLLBACK TRAN;64             PRINT '事务失败,回滚事务';65         END;66     ELSE67         BEGIN68         --没有异常,提交事务69             COMMIT TRAN;70             PRINT '提交事务';71         END;72 73         DROP TABLE #Temp

 

 

暂时先写到这里,遇到了,再整理。。。

 

转载于:https://www.cnblogs.com/xf2333/p/6908653.html

你可能感兴趣的文章
第六周项目4-成员函数、友元函数和一般函数有区别
查看>>
小试牛刀C#作为脚本语言执行解密
查看>>
Intellij创建简单Springboot项目
查看>>
编译升级php之路(5.5.7 到 5.5.37)
查看>>
31. ExtJs4回车事件监听
查看>>
ClassLoader.getResourceAsStream(name);获取配置文件的方法
查看>>
java 类加载器
查看>>
洛谷P2179 [NOI2012]骑行川藏(拉格朗日乘数法)
查看>>
FastCGI高级指南
查看>>
qemu -net tap配置上网
查看>>
358. Rearrange String k Distance Apart
查看>>
实践:VIM深入研究(20135301 && 20135337)
查看>>
MyCAT源码分析——分析环境部署
查看>>
网页录音并上传
查看>>
数组Array,集合List与字符串String,整形int的get类方法。
查看>>
服务器大量的fin_wait1 状态长时间存在原因分析
查看>>
PHP 笔记——Web页面交互
查看>>
(How to)使用IE9的F12开发人员工具分析模拟登陆网站(百度首页)的内部逻辑过程
查看>>
PHP的那些坑
查看>>
详解web容器 - Jetty与Tomcat孰强孰弱
查看>>