SQLServerinsert,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]
  []
(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');sql触发器的使用
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,
  上述⽅法已经很有效了,但是由于update语句引⽤的列值通常在操作之前就已经得到本⾝的值了,因此也可以不需要中间变量,直接使⽤语句  update testtable set k1 = k2 , k2 = k1s