Sql server 子查询返回了多个值。当子查询后跟=,!=,时,不允许这样做>;=-SQL Server

Sql server 子查询返回了多个值。当子查询后跟=,!=,时,不允许这样做>;=-SQL Server,sql-server,database,Sql Server,Database,我有两个具有多对一关系的表alerte和quittance\u alerte 我正试图在alerte表中插入一条新记录,并使用我刚刚插入的alerte\u Id将其他记录(从select查询)插入quittance\u alerte 我得到一个例外: 子查询返回了多个值。当子查询遵循=、!=、>=或者当子查询用作表达式时 这是我的密码: insert into [PrimesCXP_DB].[dbo].[alerte] (desc_alerte_id, Contenu, statut) valu

我有两个具有多对一关系的表
alerte
quittance\u alerte

我正试图在
alerte
表中插入一条新记录,并使用我刚刚插入的
alerte\u Id
将其他记录(从select查询)插入
quittance\u alerte

我得到一个例外:

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

这是我的密码:

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)

如何解决此问题?

问题在于:

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')

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

但在这里,我必须插入多行。。还有其他方法吗?另外:不要这样做:
set@alerte\u id=(从[PrimesCXP\u DB].[dbo].[alerte].[alerte]中选择MAX(id)
-使用
SCOPE\u IDENTITY()
函数:
设置@alerte\u id=SCOPE\u IDENTITY()
以真正获取最后插入的
id