Sql server CTE与多重插入

Sql server CTE与多重插入,sql-server,insert,common-table-expression,Sql Server,Insert,Common Table Expression,众所周知,CTE是在SQLServer2005中引入的,当时的人群非常狂热 我有一个例子,我在一个表中插入了大量的静态数据。我想知道的是以下哪一项更快,以及我应该注意的其他因素 INSERT INTO MyTable (MyField) VALUES ('Hello') INSERT INTO MyTable (MyField) VALUES ('World') 或 我有一种不舒服的感觉,答案将取决于MyTable上存在的触发器 (另外,我知道也不在乎批量插入CSV和任何其他方法客观上都是插入

众所周知,CTE是在SQLServer2005中引入的,当时的人群非常狂热

我有一个例子,我在一个表中插入了大量的静态数据。我想知道的是以下哪一项更快,以及我应该注意的其他因素

INSERT INTO MyTable (MyField) VALUES ('Hello')
INSERT INTO MyTable (MyField) VALUES ('World')

我有一种不舒服的感觉,答案将取决于
MyTable
上存在的触发器


(另外,我知道也不在乎批量插入CSV和任何其他方法客观上都是插入静态数据更快更好的方法。我特别想知道使用CTE与多次插入相比我应该注意的问题。)

不确定您使用的是哪个版本的SQL Server(2005或2008)-但无论您使用哪个版本,我都不认为在这种情况下使用CTE进行多个插入有什么大的好处,非常诚实。CTE在很多情况下确实很好,但这不是其中之一

所以基本上,我建议您只使用几个
INSERT
语句

在SQL Server 2008中,只需指定多个值元组即可简化这些操作:

INSERT INTO MyTable (MyField) 
VALUES ('Hello'), ('World'), ('and outer space')

和往常一样,表结构、索引和触发器的存在(或不存在)确实会对插入速度产生重大影响。如果您需要加载大量数据,那么在插入期间关闭这些约束和触发器,然后再重新打开,有时会更容易。但是,再说一次:在您的特定情况下,确实没有办法给您一个明确的指示是否是这样的,只是太多我们不知道的变量起着重要作用。衡量它,比较它,自己做决定

简单的解决方案:测试和测量!在不了解您的系统、磁盘布局、表布局等的情况下,从远处很难说清楚。指示、触发器等将发挥作用。所以说真的:只有通过测试和测量这两种方法,你才能知道……marc_s,是的,测试和分析始终是对你的具体情况给出答案的最佳方式,但我一直在寻找一些更普遍的趋势和注意事项。+1:我不久前与Quassnoi的聊天表明,使用CTE与内联视图相比,速度并没有提高。@OMGPonies:我支持这一点-但有时,我发现CTE比复杂的嵌套内联视图更可读、更容易理解。本身没有性能优势,但更容易实现read@OMGPonies,我故意排除了临时表之类的内容,但我没有想到内联视图。说得好。你能给我一个你所指的聊天室的链接吗@marc_s,我不知道SQL 2008的新语法。谢谢
INSERT INTO MyTable (MyField) 
VALUES ('Hello'), ('World'), ('and outer space')