SQL子查询返回了多个值
我的查询导致以下错误: Msg 512,16级,状态1,程序项,第17行 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 查询:SQL子查询返回了多个值,sql,sql-server,Sql,Sql Server,我的查询导致以下错误: Msg 512,16级,状态1,程序项,第17行 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 查询: INSERT INTO [Total_Database].[dbo].[Item] ( ItemID, ItemNo, ItemDescription, Notes, StandardCost, SalesGLAccountID,
INSERT INTO [Total_Database].[dbo].[Item]
(
ItemID,
ItemNo,
ItemDescription,
Notes,
StandardCost,
SalesGLAccountID,
ItemTypeID,
Backorderable
)
(
SELECT [nr],
[nr],
[Latijn]+' '+[Subgroep]+' '+CAST([nr] as VARCHAR(255)),
[NL]+' '+[Vorm]+' '+[Kenmerk]+' '+[Hoogte],[Inkoopprijs],
(4),
(case when [Productgroep]='PB' then 1 else 5 end),
(1)
FROM [ACCESDATA].[dbo].[Planten]
);
我怀疑会发生这种情况,因为我的子查询不包含WHERE,不幸的是,我不知道如何构造正确的WHERE子句。如果确实只想插入一行,那么只需在末尾添加WHERE,后跟某个谓词逻辑语句,该语句仅对查询所读取的表中的一行为真
INSERT INTO [Total_Database].[dbo].[Item](ItemID,
ItemNo,ItemDescription,Notes,StandardCost,SalesGLAccountID,
ItemTypeID,Backorderable)
SELECT [nr],[nr],[Latijn]+' '+[Subgroep]+' '+CAST([nr] as VARCHAR(255)),
[NL]+' '+[Vorm]+' '+[Kenmerk]+' '+[Hoogte],[Inkoopprijs],(4),
(case when [Productgroep]='PB' then 1 else 5 end),(1)
FROM [ACCESDATA].[dbo].[Planten]
Where [SomeColumnName] = [some Value];
。。。但是,当使用select执行Insert以生成要插入的行时,您只需键入select语句而不是Values子句,而不使用括号。我认为,因为您有周围的括号,查询处理器假设您希望它是一个单一的值。是否只插入一行数据?还是一整套数据行?我怀疑问题出在您的: 看起来像是从Inserted中选择I.COGSGLAccountID,因为我返回了多行,所以您得到了一个错误 例如,您将inserted视为一行表,从中获取参数,如从inserted I中选择@ItemNo=I.ItemNo、@ItemDescription=I.ItemDescription,但inserted表可以有多行。所以在您的例子中,我认为您有3个选项-检查inserted中只有1行,将触发器重写为set-based,或者使用cursor
这里有一个类似的例子。INSERT..SELECT在SELECT周围没有括号。括号使它成为一个子查询,这是不合适的。@rbaryyoung如果它是一个答案,那可能是一个很好的答案。@Ben,你在这个表上有触发器吗?@Ben:你能发布你的存储过程项吗?我怀疑您错误地识别了错误线路…对。一个触发器,这很容易成为问题。我喜欢一个完整的集合,我知道下面的方法是有效的:其中[nr]=“somenumber”;但是如果我删除WHERE并在不带括号或带括号的情况下执行查询,我将得到相同的错误。@Ben,这与标准SQL不一致,Insert应该可以与返回多行的Select一起正常工作。请在没有Where子句的情况下显示您正在使用的确切SQL,表明您遇到了错误。。。除非您的错误来自此表上的某个触发器,该触发器正试图使用包含此数据的子查询对另一个表执行某些操作,否则禁用该触发器将完成此任务。谢谢。在选择之前添加,然后它可以选择多表值。
INSERT INTO [Total_Database].[dbo].[Item]
(
ItemID,
ItemNo,
ItemDescription,
Notes,
StandardCost,
SalesGLAccountID,
ItemTypeID,
Backorderable
) IN
(
SELECT [nr],
[nr],
[Latijn]+' '+[Subgroep]+' '+CAST([nr] as VARCHAR(255)),
[NL]+' '+[Vorm]+' '+[Kenmerk]+' '+[Hoogte],[Inkoopprijs],
(4),
(case when [Productgroep]='PB' then 1 else 5 end),
(1)
FROM [ACCESDATA].[dbo].[Planten]
);
INSERT INTO [Total_Database].[dbo].[Item]
(
ItemID,
ItemNo,
ItemDescription,
Notes,
StandardCost,
SalesGLAccountID,
ItemTypeID,
Backorderable
) IN
(
SELECT [nr],
[nr],
[Latijn]+' '+[Subgroep]+' '+CAST([nr] as VARCHAR(255)),
[NL]+' '+[Vorm]+' '+[Kenmerk]+' '+[Hoogte],[Inkoopprijs],
(4),
(case when [Productgroep]='PB' then 1 else 5 end),
(1)
FROM [ACCESDATA].[dbo].[Planten]
);