Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有效的更新,插入语法?_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

Sql 有效的更新,插入语法?

Sql 有效的更新,插入语法?,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,这些陈述有效吗 UPDATE Table1 FROM (SELECT * FROM Table2) INSERT INTO Table1 (SELECT * FROM Table2) update语句需要为每个要更新的字段设置一个集合,所以不需要。 正确语法: UPDATE table1 SET table1.field1=table2.field1, table1.field2=table2.field2 FROM table1 INNER JOIN table2

这些陈述有效吗

UPDATE Table1 
  FROM (SELECT * FROM Table2)  

INSERT INTO Table1 
  (SELECT * FROM Table2)  

update语句需要为每个要更新的字段设置一个集合,所以不需要。 正确语法:

UPDATE table1
SET table1.field1=table2.field1, table1.field2=table2.field2 
FROM table1 
INNER JOIN table2 ON table1.keyfield = table2.keyfield
如果表1和表2的列顺序相同,则insert语句将起作用

编辑:如果您正在寻找更新/插入Upsert的示例,请查看这个在SQL 2008上运行的示例,不确定是否是2005年,但对此表示怀疑

另一个选项是更新,然后插入。例如:


update语句需要为每个要更新的字段设置一个集合,所以不需要。 正确语法:

UPDATE table1
SET table1.field1=table2.field1, table1.field2=table2.field2 
FROM table1 
INNER JOIN table2 ON table1.keyfield = table2.keyfield
如果表1和表2的列顺序相同,则insert语句将起作用

编辑:如果您正在寻找更新/插入Upsert的示例,请查看这个在SQL 2008上运行的示例,不确定是否是2005年,但对此表示怀疑

另一个选项是更新,然后插入。例如:

如果你幸运的话,这可能会奏效

我建议使用更严格的语法:

INSERT INTO dbo.Table1 (Field1, Field2, ..., FieldN)
    SELECT Field1, Field2, ..., FieldN
    FROM dbo.Table2
我将始终明确地为INSERT和SELECT语句指定模式dbo和字段。那样的话,你可以

消除计算列、标识列和其他潜在问题列 将另一列添加到两个表中时,SQL语句不会中断 马克

如果你幸运的话,这可能会奏效

我建议使用更严格的语法:

INSERT INTO dbo.Table1 (Field1, Field2, ..., FieldN)
    SELECT Field1, Field2, ..., FieldN
    FROM dbo.Table2
我将始终明确地为INSERT和SELECT语句指定模式dbo和字段。那样的话,你可以

消除计算列、标识列和其他潜在问题列 将另一列添加到两个表中时,SQL语句不会中断
Marc

一个小警告是,如果存在任何标识字段,则插入将失败。您应该始终指定要使用的列。添加、删除或重新排序列时,Select*可能会停止工作。SQL Server 2008中始终存在“合并”以执行UPSERT更新/插入。实际上,我正试图使用SQL 2005执行UPSERT。有两个TSQl添加项相交和除外。在其中一个博客中,有人说从Select tab1 INTERSECTION Destination更新Table1,并从Select tab1插入tab1,但tab2除外。感谢大家的参与@这是SQL 2005,我没有合并功能@C-Pound:我有你提到的Update和Insert语句。使用EXCEPT和INTERSECT的想法是抵消这些连接。此外,他们还声称这些新的T-SQL在性能方面优于连接。一个小警告是,如果存在任何标识字段,则插入将失败。您应该始终指定要使用的列。添加、删除或重新排序列时,Select*可能会停止工作。SQL Server 2008中始终存在“合并”以执行UPSERT更新/插入。实际上,我正试图使用SQL 2005执行UPSERT。有两个TSQl添加项相交和除外。在其中一个博客中,有人说从Select tab1 INTERSECTION Destination更新Table1,并从Select tab1插入tab1,但tab2除外。感谢大家的参与@这是SQL 2005,我没有合并功能@C-Pound:我有你提到的Update和Insert语句。使用EXCEPT和INTERSECT的想法是抵消这些连接。他们还声称,这些新的T-SQL在性能方面优于连接。