Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[SQL] Subquery returned more than 1 value.

Pagina: 1
Acties:

  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 14-11 10:35
Ik heb het volgende probleem. Zodra ik de volgende query uitvoer:

SQL:
1
2
insert into dbo.Vendor (VendorID, VendorNo, VendorName, AddressLine1, AddressLine2, AddressLine3, ZipCode, City, Country, Phone, BankNr, Fax, CurrencyID, DiscPC, TaxNo, DelayDays)
SELECT Id, CredNr, Naam, Adres1, Adres2, Adres3, PC, Plaats, Land, Telefoon, BankNr, Fax, '1' as Valuta, Korting, Bedrijfsnr, Levertijd FROM Leveranciers; 



Krijg ik de volgende melding terug:

Msg 512, Level 16, State 1, Procedure Vendor_insupd, Line 10
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.


De SELECT zelf werkt wel, en geeft ook de goede waardes die hij zou moeten geven terug.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Paste eens de hele query, ik denk niet dat de fout in dit stukje zit nl.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 14-11 10:35
P_de_B schreef op dinsdag 21 oktober 2008 @ 14:01:
Paste eens de hele query, ik denk niet dat de fout in dit stukje zit nl.
Dit is de gehele query die ik uitvoer waarop hij de error geeft. Er zitten wel nogal wat NULL value's tussen, maar dat zou niet uit mogen maken toch?

[ Voor 14% gewijzigd door Montaner op 21-10-2008 14:03 ]


  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Post de procedure "Vendor_insupd" eens, want daar zit je fout.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Vendor_insupd is een trigger waarschijnlijk :) Maar, inderdaad: daar zit de fout.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 14-11 10:35
RAJH schreef op dinsdag 21 oktober 2008 @ 14:03:
Post de procedure "Vendor_insupd" eens, want daar zit je fout.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER TRIGGER [Vendor_insupd] ON [dbo].[Vendor] FOR INSERT, UPDATE AS
SET NOCOUNT ON
DECLARE @VendorName varchar(40)
IF NOT (EXISTS (SELECT C.CurrencyID FROM Currency C INNER JOIN Inserted I ON C.CurrencyID = I.CurrencyID))
BEGIN
SELECT @VendorName = I.VendorName FROM Inserted I
RAISERROR ('Unable to insert or update vendor ''%s''...
Currency does not exist', 16, 1, @VendorName)
ROLLBACK TRANSACTION
END
IF ((SELECT I.VendorTypeID FROM Inserted I) IS NOT NULL) AND NOT (EXISTS (SELECT V.VendorTypeID FROM VendType V INNER JOIN Inserted I ON V.VendorTypeID = I.VendorTypeID))
BEGIN
SELECT @VendorName = I.VendorName FROM Inserted I
RAISERROR ('Unable to insert or update vendor ''%s''...
Vendor Type does not exist', 16, 1, @VendorName)
ROLLBACK TRANSACTION
END

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
SELECT @VendorName = I.VendorName FROM Inserted I is regel 10, dus daar zal de fout zitten. Mijn MySql kennis is niet zodanig dat ik kan zien of hier een syntax error is gemaakt.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
SELECT @VendorName = I.VendorName FROM Inserted I


Dit gaat fout als je meer dan 1 records tegelijk insert in een tabel. Dan zitten er nl. meerdere records in de virtuele 'Inserted' tabel. Je probeert met bovenstaande query meerdere records aan 1 variabele toe te wijzen. Dat kan dus niet, en dat is ook de foutmelding die je krijgt.

Je zult dus de trigger moeten aanpassen, of maximaal 1 record per transactie inserten in de tabel.

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1