SQL Server(2005/2008)
以下每个陈述都有相同的结果。有人知道一个人是否胜过另一个吗?
insert into SOMETABLE
values ('FieldOneValue','FieldTwoValue',3,4.55,'10/10/2008 16:42:00.000')
insert into SOMETABLE
select 'FieldOneValue','FieldTwoValue',3,4.55,'10/10/2008 16:42:00.000'
insert into SOMETALBE
Select
Field1 = 'FieldOneValue',
Field2 = 'FieldTwoValue',
Field3 = 3,
Field4 = 4.55,
Field5 = '10/10/2008 16:42:00.000'
当然假设数据类型与表格相符......
答案 0 :(得分:8)
我认为,基于这个问题,你已达到premature optimization的目的。如果您只是插入1条记录并让Sql Server团队使其性能最佳,我会坚持使用标准的insert()值()。
答案 1 :(得分:7)
我刚试过这个。
两套硬件上的500万次迭代,一套是16GB内存的服务器,另一套是1GB的笔记本。
结果:它们看起来是一样的。
这些的查询计划是相同的,性能差异在统计上是无关紧要的。
答案 2 :(得分:2)
我怀疑如果有性能差异,那将会有利于前者,虽然我怀疑有一个。
然而,这是选择更清晰版本(即使用VALUES)提供可读性和可维护性优势的情况之一,这可能超过可能忽略的性能影响。如果你要指定所有值,那么坚持通常的约定,以防其他人读取代码,乍一看似乎是从另一个表执行INSERT ... SELECT,这是一种误导性的外观。 / p>
答案 3 :(得分:1)
对于SQL Server,只需使用此模式
INSERT INTO TableName( fieldList ) SELECT( valueList / columnList ) [ FROM等等]
这是您需要的唯一插入模式。它做了一切。请指定 fieldlist 以保护您的语句免于将来的表更改(添加了可选列)。
使用INSERT INTO VALUES有一些细微的差别,我不记得了,因为我不需要。
答案 4 :(得分:0)
看起来你只是在模仿
INSERT into SOMETABLE
(
SELECT * FROM SOMEOTHERTABLE
)
答案 5 :(得分:-1)
忽略此评论,错误。抱歉:(
我知道当你输入多行时你不能使用INSERT VALUES()。
插入表格 SELECT 1,2,3,(SELECT 4 FROM Table2 WHERE columnA = columnB)