有效的UPDATE,INSERT语法?

Ran*_*jit 1 sql t-sql sql-server sql-server-2005

这些陈述有效吗?

UPDATE Table1 
  FROM (SELECT * FROM Table2)  

INSERT INTO Table1 
  (SELECT * FROM Table2)  
Run Code Online (Sandbox Code Playgroud)

C-P*_*uru 5

您的更新语句需要为要更新的每个字段设置一个Set,所以不需要.正确的语法:

UPDATE table1
SET table1.field1=table2.field1, table1.field2=table2.field2 
FROM table1 
INNER JOIN table2 ON table1.keyfield = table2.keyfield
Run Code Online (Sandbox Code Playgroud)

如果Table1和Table2具有相同顺序的相同列,则insert语句将起作用.

编辑: 如果您正在寻找更新/插入(Upsert)的示例,请查看此博客文章(适用于SQL 2008 - 不确定2005年,但对此表示怀疑).

另一个选项是Update,然后是插入.此博客文章的示例:

UPDATE CustomersA
   SET CustomerName = B.CustomerName
FROM CustomersA A (NoLock)
INNER JOIN CustomersB B (NoLock) ON A.CustomerId = B.CustomerId

And later run the Insert command
INSERT INTO CustomersA (
   CustomerId,
   CustomerName
)

SELECT
   Id,
   Name
FROM CustomersB (NoLock)
WHERE
   Id NOT IN (
      SELECT CustomerId FROM CustomersA (NoLock)
   )
Run Code Online (Sandbox Code Playgroud)

  • 一个小小的警告是,如果存在任何标识字段,则插入将失败. (3认同)
  • 您应该始终指定要使用的列.添加,删除或重新排序列时,"选择*"可能会停止工作. (2认同)
  • SQL Server 2008中始终有MERGE来执行您的UPSERT(更新/插入) (2认同)