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 

 

原文地址:https://www.cnblogs.com/xiangpiaopiao2011/p/2038564.html