子查询返回的值超过1。当子查询跟随=,!=,> =时,不允许这样做 - SQL Server

时间:2018-01-18 09:00:37

标签: sql-server database

我有两个表alertequittance_alerte,它们具有多对一的关系。

我正在尝试在alerte表中插入新记录,并将其他记录(从选择查询中)插入quittance_alerte,并插入alerte_Id

我得到了这个例外:

  

子查询返回的值超过1。当子查询遵循=,!=,> =或子查询用作表达式时,不允许这样做。

这是我的代码:

insert into [PrimesCXP_DB].[dbo].[alerte] (desc_alerte_id, Contenu, statut)
values (1, 'desc', '1')

declare @alerte_id int 

set @alerte_id = (SELECT MAX(id) FROM [PrimesCXP_DB].[dbo].[alerte])

insert into [PrimesCXP_DB].[dbo].[quittancier_alerte] (numero_quittance, alerte_id)
values ((SELECT NUMERO_QUITTANCE
         FROM [PCXP_Proassur_PreProd].[dbo].[QUITTANCIER]
         WHERE ETAT_MVT IN (0, 2, 4, 5, 7) 
           AND DATEDIFF(day, DATE_EFFET, GETDATE()) > 65
           AND (DATE_RNP IS NULL OR DATE_RNP = '01/01/1900')
           AND tERME_COMPTANT IN ('T', 'C')), @alerte_id)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题在于:

SELECT NUMERO_QUITTANCE
FROM [PCXP_Proassur_PreProd].[dbo].[QUITTANCIER]
WHERE ETAT_MVT IN (0, 2, 4, 5, 7)
  AND    DATEDIFF(day, DATE_EFFET, GETDATE())>65
  AND   ( DATE_RNP is null or DATE_RNP = '01/01/1900')
  AND tERME_COMPTANT in ('T', 'C')

返回多行,并且您尝试使用它,就像只返回一行一样。如果它应返回多行,则可以通过更新insert语句来插入多行:

INSERT INTO [PrimesCXP_DB].[dbo].[quittancier_alerte]
( numero_quittance, alerte_id)
SELECT NUMERO_QUITTANCE, @alerte_id
  FROM [PCXP_Proassur_PreProd].[dbo].[QUITTANCIER]
  WHERE ETAT_MVT IN (0, 2, 4, 5, 7)
  AND DATEDIFF(day, DATE_EFFET, GETDATE())>65
  AND ( DATE_RNP is null or DATE_RNP = '01/01/1900')
  AND tERME_COMPTANT in ('T', 'C')

否则,您需要弄清楚如何使子查询只返回一行。