Sql 插入不起作用

Sql 插入不起作用,sql,sql-server-2008,Sql,Sql Server 2008,为什么下面的查询不起作用: INSERT INTO [ProcessStatus] ([ProcessId]) SELECT TMP.[ProcessId] FROM ( SELECT DISTINCT [ProcessId] FROM [Process] ) TMP 错误消息为(已添加返回): 子查询返回了多个值。 当子查询在=、!=、= 或者当子查询用作表达式时。 假设[Process]只有一个字段(或任何其他自动递增字段),则不需要子查询。 尝试: 编辑:如果您只是想知道为

为什么下面的查询不起作用:

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

FROM (
SELECT DISTINCT 
     [ProcessId]
FROM [Process]
) TMP
错误消息为(已添加返回):

子查询返回了多个值。
当子查询在=、!=、=
或者当子查询用作表达式时。

假设[Process]只有一个字段(或任何其他自动递增字段),则不需要子查询。 尝试:


编辑:如果您只是想知道为什么会出现错误消息,那么它应该会工作,您确定这就是它失败的地方吗?

ProcessStatus表上可能存在错误触发器。

这似乎没有任何问题。这对我很有用:

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行受影响)


您完全确定发生了什么吗?

原始查询有一个并集,这就是我这样写的原因,为什么它不正确?这与触发器有什么关系?+1,因为它可能是一个错误触发器。显示的返回多行的子查询本身不应该是一个问题;就我所知,这句话没有错;使用insert INTO插入多行是完全可以接受的,因此研究发生更奇怪事情的可能性,比如触发器异常,这不是一个坏主意;似乎不知道如何正确地编写触发器来处理多行插入,这甚至是一个极有可能的问题。我敢打赌,如果有触发器,它首先从将某个变量设置为插入表中的值开始。格鲁伯,请编辑您的问题,向我们展示您在下面的评论中提到的联合。如果您简化了发布,您已经解决了问题,您的代码应该可以工作,因为没有子查询,只有一个派生表。
insert into [ProcessStatus] ([ProcessId])
select distinct 
     [ProcessId]
FROM [Process]
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