這些陳述是否有效?有效的UPDATE,INSERT語法?
UPDATE Table1
FROM (SELECT * FROM Table2)
INSERT INTO Table1
(SELECT * FROM Table2)
這些陳述是否有效?有效的UPDATE,INSERT語法?
UPDATE Table1
FROM (SELECT * FROM Table2)
INSERT INTO Table1
(SELECT * FROM Table2)
您的更新聲明需要爲每個要更新的字段設置,所以不需要。 正確的語法:
UPDATE table1
SET table1.field1=table2.field1, table1.field2=table2.field2
FROM table1
INNER JOIN table2 ON table1.keyfield = table2.keyfield
你插入語句將工作提供了Table 1和Table都以相同的順序相同的列。
編輯:如果您正在尋找更新/插入(的Upsert)的例子,看看這個blog post(其中2008年SQL工作 - 不知道2005年,但懷疑這一點)。
另一種選擇是更新,然後是插入。從這個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)
)
INSERT INTO Table1
(SELECT * FROM Table2)
可以工作 - 如果你是幸運的。
我建議採用更嚴格的語法:
INSERT INTO dbo.Table1 (Field1, Field2, ..., FieldN)
SELECT Field1, Field2, ..., FieldN
FROM dbo.Table2
我會總是和明確指定模式(DBO)和字段我的兩個INSERT和我的SELECT語句。這樣,你可以
馬克
一個小小的警告,如果有插入會失敗存在任何身份字段。 – MartW 2009-09-16 17:53:08
您應該始終指定要使用的列。當選擇添加,刪除或重新排序列時,「Select *」可能會停止工作。 – 2009-09-16 17:54:18
在SQL Server 2008中總是有MERGE來執行你的UPSERT(UPDATE/INSERT) – 2009-09-16 17:56:30