2010-11-04 86 views
0

为什么没有查询以下工作:插入到不工作

INSERT INTO [ProcessStatus] ([ProcessId]) 
SELECT TMP.[ProcessId] 

FROM (
SELECT DISTINCT 
    [ProcessId] 
FROM [Process] 
) TMP 

被(加入退货)错误信息:

Subquery returned more than 1 value. 
This is not permitted when the subquery follows =, !=, <, <= , >, >= 
or when the subquery is used as an expression. 
+0

Gruber,请编辑您的问题,向我们展示您在下面的评论中提到的工会。 – 2010-11-04 11:53:40

+1

如果你已经简化了发布过程,你已经解决了这个问题,你的代码应该工作,因为没有子查询只有派生表。 – HLGEM 2010-11-04 13:27:07

回答

2

ProcessStatus表上可能有一个错误的触发器。

+0

这与触发器有什么关系? – RPM1984 2010-11-04 10:26:42

+2

+1,因为它*可能*是一个bugger触发器。显示返回多行的子查询本身不应该是一个问题 – AdaTheDev 2010-11-04 10:34:57

+0

确实;据我所知,这个陈述没有任何错误;使用INSERT INTO插入多行是完全可以接受的,因此寻找异常事件发生的可能性,如触发奇怪,并不是一个坏主意。 – 2010-11-04 10:37:13

0

假设[处理]仅具有一个场(或任何其他的自动增量),你不需要子查询。 尝试:

insert into [ProcessStatus] ([ProcessId]) 
select distinct 
    [ProcessId] 
FROM [Process] 

编辑:如果你只是想知道为什么错误信息,它应该工作,你确定这正是它的失败?

+0

原始查询有一个联盟,这就是为什么我这样写它,为什么它不正确? – gruber 2010-11-04 10:20:09

0

这似乎没有任何问题。它为我的作品:

CREATE TABLE #ProcessStatus (ProcessID INTEGER) 
CREATE TABLE #Process (ProcessID INTEGER) 

INSERT INTO #Process VALUES(1) 
INSERT INTO #Process VALUES(2) 

INSERT INTO #ProcessStatus (ProcessId) 
SELECT TMP.ProcessId 
FROM (
SELECT DISTINCT 
    ProcessId 
FROM #Process 
) TMP 

(2影响的行(S))

你绝对清楚这是怎么回事?