OVH Cloud OVH Cloud

Probleme de @@ERROR

7 réponses
Avatar
Stéphane Gauthier
J'ai une requ=EAte UPDATE qui me retourne une erreur car la=20
sous-requ=EAte renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le g=E8re en testant le=20
@@ERROR apr=E8s le UPDATE, mais m=EAme si la requ=EAte plante,=20
le @@ERROR=3D0...

Je ne comprends pas, surtout que cela n'arrive pas sur=20
tous les serveurs (essay=E9 la requ=EAte sur plusieurs), m=EAme=20
si ils ont la m=EAme version: SQLServer 2000 SP3a sur Win2k.

Je mets ci dessous la requ=EAte que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET=20
FOLDER_ID=3D(SELECT S._SITE_ID=20
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=3DR._RHO_CODE=20
AND ERP_CODE=3DR._ERP_CODE
AND S._INTERNID=3DR._INTERNID)
print @@error

Et =E7a donne le r=E9sultat:
Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted=20
when the subquery follows =3D, !=3D, <, <=3D , >, >=3D or when the=20
subquery is used as an expression.
The statement has been terminated.
0

Notez bien le "0"...=20

Pourquoi il me fait =E7a?

7 réponses

Avatar
Boss Hog
Salut
/*
Si CUSTOMER_ID est est un param ou une variable il manque le @
sinon il manque l'alias Exemple Alias.CUSTOMER_ID
idem pour ERP_CODE
*/
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Boss Hog
@+

"Stéphane Gauthier" wrote
in message news:a16401c47942$5111a5d0$
J'ai une requête UPDATE qui me retourne une erreur car la
sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête plante,
le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs), même
si ils ont la même version: SQLServer 2000 SP3a sur Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?
Avatar
Boss Hog
Re-salut
il te faut peut etre ajouter ceci dans ta PS
Set NoCount on
car je suppose que le 0 est le nombre de ligne retournées par la PS, qui
sais ?!
@+
Boss Hog

"Stéphane Gauthier" wrote
in message news:a16401c47942$5111a5d0$
J'ai une requête UPDATE qui me retourne une erreur car la
sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête plante,
le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs), même
si ils ont la même version: SQLServer 2000 SP3a sur Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?
Avatar
Stéphane Gauthier
salut,
Non, le 0 est bien le résultat du print. J'ai quand même
tenté le set nocount, mais ça ne change rien..


-----Message d'origine-----
Re-salut
il te faut peut etre ajouter ceci dans ta PS
Set NoCount on
car je suppose que le 0 est le nombre de ligne retournées


par la PS, qui
sais ?!
@+
Boss Hog

"Stéphane Gauthier" <NOSPAMstephane.gauthier-


wrote
in message news:a16401c47942$5111a5d0$
J'ai une requête UPDATE qui me retourne une erreur car la
sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête plante,
le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs), même
si ils ont la même version: SQLServer 2000 SP3a sur Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?



.



Avatar
Stéphane Gauthier
Non, CUSTOMER_ID et ERP_CODE sont des colonnes de la table
TRT_CUSTOMERS, donc pas besoin de répéter le nom de table
ou alias dans la sous requête.

-----Message d'origine-----
Salut
/*
Si CUSTOMER_ID est est un param ou une variable il manque


le @
sinon il manque l'alias Exemple Alias.CUSTOMER_ID
idem pour ERP_CODE
*/
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Boss Hog
@+

"Stéphane Gauthier" <NOSPAMstephane.gauthier-


wrote
in message news:a16401c47942$5111a5d0$
J'ai une requête UPDATE qui me retourne une erreur car la
sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête plante,
le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs), même
si ils ont la même version: SQLServer 2000 SP3a sur Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?



.



Avatar
Fred BROUARD
essaye :

UPDATE SMART.DBO.TRT_CUSTOMERS
SET FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S
INNER JOIN SMART.DBO.RHOCUSCO R
ON ?.CUSTOMER_ID = R._RHO_CODE
AND ?.ERP_CODE=R._ERP_CODE
IF @@ERROR <> 0
PRINT 'erreur'
ELSE
PRINT 'OK'


Stéphane Gauthier a écrit:
J'ai une requête UPDATE qui me retourne une erreur car la
sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête plante,
le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs), même
si ils ont la même version: SQLServer 2000 SP3a sur Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?



il t'envoie d'abord le message d'erreur du select en cause. Puis tu lance une
nouvelle commande PRINT qui elle remet @@error à zéro. Il imprime donc la valeur
de @@Error remise à zéro.

Il suffit de savoir gérer les erreurs...

A lire :
http://sqlpro.developpez.com/TransactSQL/SQL_MSTransactSQL.html#4.3

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Stéphane
Non, ça marche pas, car à la place des "?" il faudrait que
je mette la table TRT_CUSTOMERS sur laquelle est fait
l'update
Mais si je la mets, il ne s'agit plus de la même table
pour SQL...

-----Message d'origine-----
essaye :

UPDATE SMART.DBO.TRT_CUSTOMERS
SET FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S
INNER JOIN SMART.DBO.RHOCUSCO R
ON ?.CUSTOMER_ID = R._RHO_CODE
AND ?.ERP_CODE=R._ERP_CODE
IF @@ERROR <> 0
PRINT 'erreur'
ELSE
PRINT 'OK'


Stéphane Gauthier a écrit:
J'ai une requête UPDATE qui me retourne une erreur car




la
sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête




plante,
le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs),




même
si ils ont la même version: SQLServer 2000 SP3a sur




Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?



il t'envoie d'abord le message d'erreur du select en


cause. Puis tu lance une
nouvelle commande PRINT qui elle remet @@error à zéro. Il


imprime donc la valeur
de @@Error remise à zéro.

Il suffit de savoir gérer les erreurs...

A lire :
http://sqlpro.developpez.com/TransactSQL/SQL_MSTransactSQL


.html#4.3

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL /


spécialiste Delphi, web
Livre SQL - col. Référence :


http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros :


http://sqlpro.developpez.com
************************ www.datasapiens.com


*************************

.



Avatar
Fred BROUARD
As tu lu ma prose jusqu'au bout ???

A +

Stéphane a écrit:
Non, ça marche pas, car à la place des "?" il faudrait que
je mette la table TRT_CUSTOMERS sur laquelle est fait
l'update
Mais si je la mets, il ne s'agit plus de la même table
pour SQL...


-----Message d'origine-----
essaye :

UPDATE SMART.DBO.TRT_CUSTOMERS
SET FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S
INNER JOIN SMART.DBO.RHOCUSCO R
ON ?.CUSTOMER_ID = R._RHO_CODE
AND ?.ERP_CODE=R._ERP_CODE
IF @@ERROR <> 0
PRINT 'erreur'
ELSE
PRINT 'OK'


Stéphane Gauthier a écrit:

J'ai une requête UPDATE qui me retourne une erreur car





la

sous-requête renvoit plusieurs valeurs.

Comme ce cas peut arriver, je le gère en testant le
@@ERROR après le UPDATE, mais même si la requête





plante,

le @@ERROR=0...

Je ne comprends pas, surtout que cela n'arrive pas sur
tous les serveurs (essayé la requête sur plusieurs),





même

si ils ont la même version: SQLServer 2000 SP3a sur





Win2k.

Je mets ci dessous la requête que j'ai:
UPDATE SMART.DBO.TRT_CUSTOMERS
SET
FOLDER_ID=(SELECT S._SITE_ID
FROM SMART.DBO.SITE S , SMART.DBO.RHOCUSCO R
WHERE CUSTOMER_ID=R._RHO_CODE
AND ERP_CODE=R._ERP_CODE
AND S._INTERNID=R._INTERNID)
print @@error

Et ça donne le résultat:
Server: Msg 512, Level 16, State 1, Line 1
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.
0

Notez bien le "0"...

Pourquoi il me fait ça?



il t'envoie d'abord le message d'erreur du select en



cause. Puis tu lance une

nouvelle commande PRINT qui elle remet @@error à zéro. Il



imprime donc la valeur

de @@Error remise à zéro.

Il suffit de savoir gérer les erreurs...

A lire :
http://sqlpro.developpez.com/TransactSQL/SQL_MSTransactSQL



.html#4.3

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL /



spécialiste Delphi, web

Livre SQL - col. Référence :



http://sqlpro.developpez.com/bookSQL.html

Le site du SQL, pour débutants et pros :



http://sqlpro.developpez.com

************************ www.datasapiens.com



*************************

.









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************