zoukankan      html  css  js  c++  java
  • SQLServer insert,update语句

    SQLServer  深入DML

    一、insert语句:

    1、4种基本格式

    (1) insert [into] targettable [(targetcoloum1[,targetcolumn2])] values (value1[,value2])

    (2)insert [into] targettable default values  ----所有列都需要有默认值

    (3)insert [into] targettable [(targetcoloum1[,targetcolumn2])]

      select sourcecolumn1[,sourcecolumn2]

      [from sourcetable.....]

    (4) insert [into] targettable [(targetcoloum1[,targetcolumn2])] exec sourceprocedurename  ----采用存储过程来插入值

    2、insert和错误:在sqlserver中默认是如果一组insert在一个批命令中执行,并且其中有一个失败时,其他命令不会受到影响。如果希望有一个insert失败时整个批命令都失败,那在每个insert后检查自动变量@@error并作出相应的反应。如:

    create table #test(
    id int unique,
    name varchar(20) not null);

    insert into #test values(1,'a');
    if(@@error <> 0) goto list
    insert into #test values(2,'b');   
    if(@@error <> 0) goto list
    insert into #test values(2,'c');
    if(@@error <> 0) goto list
    insert into #test values(4,'d');

    list:
    select * from #test

    在执行到红色标记那一块时,由于发生重复键的异常,下面的insert语句不再执行,转入到select * from #test语句中

    3、成批插入:采用bulk insert命令来进行大量数据的载入,如:

    create table test (k1 integer,k2 varchar(20))

    bulk insert test from 'D:\GG_TS\test.bcp';

      默认情况下,bulk insert只执行unique约束,其他约束会被忽略掉。

    二、update语句

    1、upate和case:如:现有一表title,有字段type,price,现要根据type来更新price字段的值,如:

       update title

       set price = price * case type when 'kangshifu' then 1.5

                    when 'jinmailang' then 1.4

                    else .75

      end

    2、用update检测约束:

      若对有insert触发器的表进行bulk insert后,你会发现触发器不会被触发,若需要进行约束的检查,则可通过一个假的update操作,即简单的将列值置成其本身的值。如:

    create table test (k1 integer,k2 varchar(20))

    bulk insert test from 'D:\GG_TS\test.bcp';

    select * from test

    update test set k1=k1,k2=k1.------------------------可通过这样的语句来检查定位非法数据

    3、用update 交换列值:定义一个临时变量,采用语句:

      declare @temp float    

      update  testtable

      set @temp = k1,

        k1=k2,

        k2=@temp

      上述方法已经很有效了,但是由于update语句引用的列值通常在操作之前就已经得到本身的值了,因此也可以不需要中间变量,直接使用语句   update testtable set k1 = k2 , k2 = k1s 

     

  • 相关阅读:
    测试一下你的T-SQL基础知识-count
    测试一下你的T-SQL基础知识-subquery
    Microsoft SQL Server 2012 管理 (2): Auditing
    Webpack
    react
    Webpack 傻瓜式指南(一)
    谈谈react-router学习
    使用Flexible 实现手淘H5 页面的终端适配学习
    Promise 让异步更优
    基于LeanCloud云引擎的Web全栈方案
  • 原文地址:https://www.cnblogs.com/xiangpiaopiao2011/p/2038564.html
Copyright © 2011-2022 走看看