这些陈述是否有效?
UPDATE Table1
FROM (SELECT * FROM Table2)
INSERT INTO Table1
(SELECT * FROM Table2)
答案 0 :(得分:5)
您的更新语句需要为要更新的每个字段设置一个Set,所以没有。 正确的语法:
UPDATE table1
SET table1.field1=table2.field1, table1.field2=table2.field2
FROM table1
INNER JOIN table2 ON table1.keyfield = table2.keyfield
如果Table1和Table2具有相同顺序的相同列,则您的insert语句将起作用。
编辑:如果您正在寻找更新/插入(Upsert)的示例,请查看此blog post(适用于SQL 2008 - 不确定2005年但有疑问它)。
另一个选项是Update,然后是插入。此blog post的示例:
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)
)
答案 1 :(得分:2)
INSERT INTO Table1
(SELECT * FROM Table2)
如果你很幸运,那可能有用。
我建议使用更严格的语法:
INSERT INTO dbo.Table1 (Field1, Field2, ..., FieldN)
SELECT Field1, Field2, ..., FieldN
FROM dbo.Table2
我始终和显式为我的INSERT和SELECT语句指定架构(dbo)和字段。那样,你可以
马克