我有两个表alerte
和quittance_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)
我该如何解决这个问题?
答案 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')
否则,您需要弄清楚如何使子查询只返回一行。