2016-04-27 101 views
0

让我们考虑下列插入:如何在SQL Server内部插入选择工作?

INSERT INTO SOMETABLE 
SELECT * FROM SOMETABLE 
WHERE Column > NUMBER 

是否有结果集SELECT语句是可以改变的,由于插入的危险吗? 换句话说,SELECT语句可以通过查询引擎计算多少次以执行INSERT INTO SELECT到同一个表中?

假设:没有并发事务的单线程场景。

+4

否。插入操作是单个ACIDic操作。如果不存在,数据库的整个概念将会出现大问题。 https://en.wikipedia.org/wiki/ACID –

+0

我认为相同,但当我看到单行重复多次而不是一次时,我感到很惊讶。也许我有幻觉,我会再次检查。 – tgrabus

+0

@grabus:你在使用连接吗?将'INSERT'行注释掉并运行'SELECT'部分来解决这样的查询是很方便的。这样,您可以验证您的'SELECT'语句是否拉入您期望的数据。我怀疑你有一个配置错误的连接或一些不好的数据。如果您希望插入唯一的记录,“DISTINCT”可以帮助解决这个问题。 – Ellesedil

回答

0

由于插入操作,SELECT语句的结果集可以更改吗?

否。SELECT声明的结果集不受INSERT的影响。 SELECT的结果与您自己运行它的结果相同。