SQL批量插入/更新 [英] Sql Bulk Insert/Update

查看:110
本文介绍了SQL批量插入/更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据表.

我想以这种方式执行批量更新:如果表中存在记录,则应该对其进行更新,否则应插入新行.

I have a datatable.

I want to perform a Bulk update in such a way that if a record is present in a table then it should be updated, else a new row should be inserted.

Is there any best way to do this in one shot?

推荐答案

我认为您应该在临时表或临时表中批量插入数据,然后编写SQL语句来检查现有记录,然后再插入主表.

如果使用的是SQL 2008,则也可以使用新的MERGE语句.
http://technet.microsoft.com/en-us/library/bb510625.aspx [ ^ ]
I think you should bulk insert data in the staging or temp table and then write SQL statements to check for existing records before inserting in the main table.

If you are using SQL 2008, then you can use the new MERGE statement as well.
http://technet.microsoft.com/en-us/library/bb510625.aspx[^]


那样尝试

Try like that

CREATE PROC AlterSomeObj
 @act VARCHAR(10) = ''C'',    
 @objXML xml     
AS    
    
IF (@act = ''C'')    -- for creating
BEGIN    
    
 INSERT Table1(val1, val2)    
 SELECT     
    
  ITEM.TAB.value(''val1[1]'',''VARCHAR(1000)'') AS val1 ,    
  ITEM.TAB.value(''val2[1]'',''VARCHAR(MAX)'') AS val2 ,    
  FROM @objXML.nodes(''ParentNode/ChildNode'') ITEM(TAB)    
    
END    
ELSE IF(@act = ''U'')     -- for updating
BEGIN    
 U Table1    
 SET     
 val1 = TAB.val1 ,     
 val2 = TAB.val2,    
    
 FROM     
  Table1 ITEMITEMS    
  INNER JOIN    
  (    
   SELECT    
    ITEM.TAB.value(''val1[1]'',''VARCHAR(1000)'') AS val1 ,    
    ITEM.TAB.value(''val2[1]'',''VARCHAR(MAX)'') AS val2 
    
   FROM @objXML.nodes(''ParentNode/ChildNode'') ITEM(TAB)    
  )TAB    
    
 ON ITEMITEMS.ID = @urlID    
   
    
END    
ELSE IF(@act = ''D'')    -- for deleting
BEGIN    
--delete logic
END    



我认为它将解决您的问题



As I think it will solve your problem


这篇关于SQL批量插入/更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆