SQL Server 2000 - Procédure stockée - Erreur 446

Le
Gilbert Tordeur
Bonjour,

En créant la procédure stockée suivante, j'obtiens l'erreur 446 : impossible
de résoudre le classement en conflit de l'opération equal to, au moment de
vérifier sa syntaxe.

CREATE PROCEDURE dbo.Aatest
(
@ListeGroupes varchar(4095)
)
AS
SET NOCOUNT OFF;
SELECT
AupCodTypeIdentification
, AupNomDomaineIdentifiant
FROM AutorisationProgramme
JOIN ParseString(@ListeGroupes) Liste ON AupNomDomaineIdentifiant =
Liste.mot
;
GO

Le but est de sélectionner les enregistrements pour lequels le champ
AupNomDomaineIdentifiant (varchar 255) est égal à une des valeurs contenues
dans @ListeGroupes.

La fonction ParseString est la suivante :

/* Fonction traitant une liste de valeurs String pour permettre son emploi
comme critère de sélection dans une instruction SELECT */
/* Inspiré de http://www.sommarskog.se/arrays-in-sql-2000.html#iterative */
/* Gilbert Tordeur - 9/1/2007 */
CREATE FUNCTION dbo.ParseString
(
@liste varchar(4095)
)
RETURNS @tbl TABLE (mot varchar(255))
AS

BEGIN
DECLARE
@pos int
, @textpos int
, @tmpstr varchar(4095)
, @tmpval varchar(255)
, @delimiter char(1)

SET @textpos = 1
SET @delimiter = ','
SET @tmpstr = @liste
SET @textpos = 1
SET @pos = charindex(@delimiter, @tmpstr)

WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT @tbl (mot) VALUES(@tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END

INSERT @tbl(mot) VALUES (ltrim(rtrim(@tmpstr)))
RETURN

END

Je ne comprends pas le message d'erreur, et suis donc dans l'incapacité d'y
remédier. Merci de votre aide.
Gilbert Tordeur
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SQLpro
Le #11884021
Il suffit que vous pilotiez la collation adéquate dans l'opération de
comparaison des châines de caractère "=".

Lisez l'article que j'ai écrit à, ce sujet :
http://sqlpro.developpez.com/cours/sqlserver/collations/

A +


Frédéric BROUARD - SQLpro - MVP SQL Server
Spécialiste SQL/BD modélisation de données
SQL & SGBDR http://sqlpro.developpez.com/
Expert SQL Server : http://www.sqlspot.com
audits - optimisation - tuning - formation


On 9 jan, 16:55, "Gilbert Tordeur"
Bonjour,

En créant la procédure stockée suivante, j'obtiens l'erreur 446 : im possible
de résoudre le classement en conflit de l'opération equal to, au momen t de
vérifier sa syntaxe.

CREATE PROCEDURE dbo.Aatest
(
@ListeGroupes varchar(4095)
)
AS
SET NOCOUNT OFF;
SELECT
AupCodTypeIdentification
, AupNomDomaineIdentifiant
FROM AutorisationProgramme
JOIN ParseString(@ListeGroupes) Liste ON AupNomDomaineIdentifiant =
Liste.mot
;
GO

Le but est de sélectionner les enregistrements pour lequels le champ
AupNomDomaineIdentifiant (varchar 255) est égal à une des valeurs cont enues
dans @ListeGroupes.

La fonction ParseString est la suivante :

/* Fonction traitant une liste de valeurs String pour permettre son emploi
comme critère de sélection dans une instruction SELECT */
/* Inspiré dehttp://www.sommarskog.se/arrays-in-sql-2000.html#iterative* /
/* Gilbert Tordeur - 9/1/2007 */
CREATE FUNCTION dbo.ParseString
(
@liste varchar(4095)
)
RETURNS @tbl TABLE (mot varchar(255))
AS

BEGIN
DECLARE
@pos int
, @textpos int
, @tmpstr varchar(4095)
, @tmpval varchar(255)
, @delimiter char(1)

SET @textpos = 1
SET @delimiter = ','
SET @tmpstr = @liste
SET @textpos = 1
SET @pos = charindex(@delimiter, @tmpstr)

WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT @tbl (mot) VALUES(@tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END

INSERT @tbl(mot) VALUES (ltrim(rtrim(@tmpstr)))
RETURN

END

Je ne comprends pas le message d'erreur, et suis donc dans l'incapacité d'y
remédier. Merci de votre aide.
Gilbert Tordeur


Philippe TROTIN [MS]
Le #11884011
Bonjour,
Avec un COLLATE database_default par exemple

SELECT
AupCodTypeIdentification
, AupNomDomaineIdentifiant
FROM AutorisationProgramme
JOIN ParseString(@ListeGroupes) Liste ON AupNomDomaineIdentifiant
= Liste.mot COLLATE database_default





Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Gilbert Tordeur" groupe de discussion :
Bonjour,

En créant la procédure stockée suivante, j'obtiens l'erreur 446 :
impossible de résoudre le classement en conflit de l'opération equal to,
au moment de vérifier sa syntaxe.

CREATE PROCEDURE dbo.Aatest
(
@ListeGroupes varchar(4095)
)
AS
SET NOCOUNT OFF;
SELECT
AupCodTypeIdentification
, AupNomDomaineIdentifiant
FROM AutorisationProgramme
JOIN ParseString(@ListeGroupes) Liste ON AupNomDomaineIdentifiant
= Liste.mot
;
GO

Le but est de sélectionner les enregistrements pour lequels le champ
AupNomDomaineIdentifiant (varchar 255) est égal à une des valeurs
contenues dans @ListeGroupes.

La fonction ParseString est la suivante :

/* Fonction traitant une liste de valeurs String pour permettre son emploi
comme critère de sélection dans une instruction SELECT */
/* Inspiré de http://www.sommarskog.se/arrays-in-sql-2000.html#iterative
*/
/* Gilbert Tordeur - 9/1/2007 */
CREATE FUNCTION dbo.ParseString
(
@liste varchar(4095)
)
RETURNS @tbl TABLE (mot varchar(255))
AS

BEGIN
DECLARE
@pos int
, @textpos int
, @tmpstr varchar(4095)
, @tmpval varchar(255)
, @delimiter char(1)

SET @textpos = 1
SET @delimiter = ','
SET @tmpstr = @liste
SET @textpos = 1
SET @pos = charindex(@delimiter, @tmpstr)

WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT @tbl (mot) VALUES(@tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END

INSERT @tbl(mot) VALUES (ltrim(rtrim(@tmpstr)))
RETURN

END

Je ne comprends pas le message d'erreur, et suis donc dans l'incapacité
d'y remédier. Merci de votre aide.
Gilbert Tordeur





Gilbert Tordeur
Le #11883991
Merci à Philippe pour la solution, qui a effectivement résolu mon problème,
et merci à Frédéric pour l'article de fond, que je vais me farcir
aujourd'hui.
Bonne journée,
Gilbert Tordeur


"Philippe TROTIN [MS]" message de news:
Bonjour,
Avec un COLLATE database_default par exemple

SELECT
AupCodTypeIdentification
, AupNomDomaineIdentifiant
FROM AutorisationProgramme
JOIN ParseString(@ListeGroupes) Liste ON AupNomDomaineIdentifiant
= Liste.mot COLLATE database_default





Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"Gilbert Tordeur" groupe de discussion :
Bonjour,

En créant la procédure stockée suivante, j'obtiens l'erreur 446 :
impossible de résoudre le classement en conflit de l'opération equal to,
au moment de vérifier sa syntaxe.

CREATE PROCEDURE dbo.Aatest
(
@ListeGroupes varchar(4095)
)
AS
SET NOCOUNT OFF;
SELECT
AupCodTypeIdentification
, AupNomDomaineIdentifiant
FROM AutorisationProgramme
JOIN ParseString(@ListeGroupes) Liste ON AupNomDomaineIdentifiant
= Liste.mot
;
GO

Le but est de sélectionner les enregistrements pour lequels le champ
AupNomDomaineIdentifiant (varchar 255) est égal à une des valeurs
contenues dans @ListeGroupes.

La fonction ParseString est la suivante :

/* Fonction traitant une liste de valeurs String pour permettre son
emploi comme critère de sélection dans une instruction SELECT */
/* Inspiré de http://www.sommarskog.se/arrays-in-sql-2000.html#iterative
*/
/* Gilbert Tordeur - 9/1/2007 */
CREATE FUNCTION dbo.ParseString
(
@liste varchar(4095)
)
RETURNS @tbl TABLE (mot varchar(255))
AS

BEGIN
DECLARE
@pos int
, @textpos int
, @tmpstr varchar(4095)
, @tmpval varchar(255)
, @delimiter char(1)

SET @textpos = 1
SET @delimiter = ','
SET @tmpstr = @liste
SET @textpos = 1
SET @pos = charindex(@delimiter, @tmpstr)

WHILE @pos > 0
BEGIN
SET @tmpval = ltrim(rtrim(left(@tmpstr, @pos - 1)))
INSERT @tbl (mot) VALUES(@tmpval)
SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
SET @pos = charindex(@delimiter, @tmpstr)
END

INSERT @tbl(mot) VALUES (ltrim(rtrim(@tmpstr)))
RETURN

END

Je ne comprends pas le message d'erreur, et suis donc dans l'incapacité
d'y remédier. Merci de votre aide.
Gilbert Tordeur







Publicité
Poster une réponse
Anonyme