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
值