OVH Cloud OVH Cloud

Invalid length parameter passed to the substring function

5 réponses
Avatar
rdelabergerie
Bonjour à tous,

Je fait ce message car je me demande si je ne suis pas face à un bug de SQL
server 2000.

J'ai crée une vue dans le sql server relativement complexe et j'ai un
probléme quand je lui passe certain paramétre.

ex :
SELECT * FROM mavue
ca fonctionne

SELECT * FROM mavue WHERE client = 123
fonctionne renvoi 8 ligne

SELECT * FROM mavue WHERE Produit = 'monproduit'
fonctionne renvoi 6 ligne

SELECT * FROM mavue WHERE Produit = 'monproduit' AND client = 123
renvoi l'erreur : Invalid length parameter passed to the substring function.
la requéte devrait renvoyer 4 lignes

Comment une requéte peux planter avec 2 paramétres et marcher avec chacun de
ces paramétres séparement ?
Cela me parait impossible.

Merci de toute aide possible.

5 réponses

Avatar
Fred BROUARD
rdelabergerie a écrit :
Bonjour à tous,

Je fait ce message car je me demande si je ne suis pas face à un bug de SQL
server 2000.

J'ai crée une vue dans le sql server relativement complexe et j'ai un
probléme quand je lui passe certain paramétre.

ex :
SELECT * FROM mavue
ca fonctionne

SELECT * FROM mavue WHERE client = 123
fonctionne renvoi 8 ligne

SELECT * FROM mavue WHERE Produit = 'monproduit'
fonctionne renvoi 6 ligne

SELECT * FROM mavue WHERE Produit = 'monproduit' AND client = 123
renvoi l'erreur : Invalid length parameter passed to the substring function.
la requéte devrait renvoyer 4 lignes

Comment une requéte peux planter avec 2 paramétres et marcher avec chacun de
ces paramétres séparement ?



Si vous postiez la définition SQL de la vue cela nous aiderais !

A +

Cela me parait impossible.

Merci de toute aide possible.




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
bruno reiter
client est numérique?

br

"rdelabergerie" a écrit dans le
message de news:
Bonjour à tous,

Je fait ce message car je me demande si je ne suis pas face à un bug de
SQL
server 2000.

J'ai crée une vue dans le sql server relativement complexe et j'ai un
probléme quand je lui passe certain paramétre.

ex :
SELECT * FROM mavue
ca fonctionne

SELECT * FROM mavue WHERE client = 123
fonctionne renvoi 8 ligne

SELECT * FROM mavue WHERE Produit = 'monproduit'
fonctionne renvoi 6 ligne

SELECT * FROM mavue WHERE Produit = 'monproduit' AND client = 123
renvoi l'erreur : Invalid length parameter passed to the substring
function.
la requéte devrait renvoyer 4 lignes

Comment une requéte peux planter avec 2 paramétres et marcher avec chacun
de
ces paramétres séparement ?
Cela me parait impossible.

Merci de toute aide possible.


Avatar
rdelabergerie
Oui
Mais de toute facon avec '123' cela fait exactement a même chose

"bruno reiter" a écrit :
client est numérique?

br

"rdelabergerie" a écrit dans le
message de news:
> Bonjour à tous,
>
> Je fait ce message car je me demande si je ne suis pas face à un bug de
> SQL
> server 2000.
>
> J'ai crée une vue dans le sql server relativement complexe et j'ai un
> probléme quand je lui passe certain paramétre.
>
> ex :
> SELECT * FROM mavue
> ca fonctionne
>
> SELECT * FROM mavue WHERE client = 123
> fonctionne renvoi 8 ligne
>
> SELECT * FROM mavue WHERE Produit = 'monproduit'
> fonctionne renvoi 6 ligne
>
> SELECT * FROM mavue WHERE Produit = 'monproduit' AND client = 123
> renvoi l'erreur : Invalid length parameter passed to the substring
> function.
> la requéte devrait renvoyer 4 lignes
>
> Comment une requéte peux planter avec 2 paramétres et marcher avec chacun
> de
> ces paramétres séparement ?
> Cela me parait impossible.
>
> Merci de toute aide possible.





Avatar
rdelabergerie
Je ne voulais pas le faire au début suite à la taille de la vue mais bon :

SELECT TOP 100 PERCENT dbo.TBLOrdenesFabricacion.IDCliente AS Client,
RIGHT(dbo.TBLOrdenesFabricacion.IDOptiXML, 7) AS CDE,
SUBSTRING(dbo.TBLOrdenesFabricacion.IDOptiXML, 2, 3)
AS Paire, dbo.TBLOrdenesFabricacion.IDOrdenFabricacion AS CdeNum,
dbo.TBLOrdenesFabricacion.IDOptiXML AS CdeXML,
dbo.TBLOrdenesFabricacion.IdVendedor AS Standard,
dbo.TBLVendedores.NOMBRE AS Staandardiste_,
dbo.TBLOrdenesFabricacion.FechaCreacion AS Date,
dbo.TBLOrdenesFabricacion.OjoDerecho AS DG,
dbo.TBLOrdenesFabricacion.referencia AS Référence,
dbo.TBLOrdenesFabricacion.DESCRIPCION AS Produit,
dbo.TBLOrdenesFabricacion.DIAM AS Dia, dbo.TBLOrdenesFabricacion.ESF AS Sph,
dbo.TBLOrdenesFabricacion.CIL AS Cyl,
dbo.TBLOrdenesFabricacion.ADIC AS Addition, dbo.TBLOrdenesFabricacion.eje AS
axe,
dbo.TBLOrdenesFabricacion.CANTIDAD AS Qté,
CASE WHEN IDTinttype <> '0' THEN +
dbo.TBLOrdenesFabricacion.IDTintType + dbo.TBLOrdenesFabricacion.IDTinting1 +
dbo.TBLOrdenesFabricacion.IDTinting2
ELSE '' END AS Colo,
dbo.TBLOrdenesFabricacion.Observaciones AS remarques,
dbo.TBLOrdenesFabricacion.estado AS etape,
dbo.TblEstadosFabricacion.NombreEstado AS etape_,
dbo.TBLOrdenesFabricacion.dataentrega AS Livraison,
dbo.TBLOrdenesFabricacion.NovaDataEntrega AS
NouvelleLivraison, dbo.TBLOrdenesFabricacion.Descricaonovadata AS Raison,
dbo.TBLOrdenesFabricacion.Frame_SkuCode AS Monture,
CONVERT(varchar, dbo.TBLOrdenesFabricacion.IdAlbaran) AS BL,
dbo.TBLOrdenesFabricacion.idOutSource,
dbo.Altra_OutSource.OutSourceName AS Outsource,
CASE WHEN FechaLlegada > dbo.TBLALBARANES.FECHA THEN
FechaLlegada ELSE Fecha END AS Dateliv,
dbo.TBLOrdenesFabricacion.referencia AS Reference,
dbo.TBLOrdenesFabricacion.FechaCreacion AS Datecde
FROM dbo.TBLVendedores RIGHT OUTER JOIN
dbo.TBLALBARANES RIGHT OUTER JOIN
dbo.TBLARTICULOSALBARAN ON dbo.TBLALBARANES.IDALBARAN
= dbo.TBLARTICULOSALBARAN.IDALBARAN RIGHT OUTER JOIN
dbo.VWartAlbaranesOrders RIGHT OUTER JOIN
dbo.TBLOrdenesFabricacion LEFT OUTER JOIN
dbo.Altra_OutSource ON
dbo.TBLOrdenesFabricacion.idOutSource = dbo.Altra_OutSource.idOutSource ON
dbo.VWartAlbaranesOrders.ordenfabricante =
dbo.TBLOrdenesFabricacion.ordenfabricante ON
dbo.TBLARTICULOSALBARAN.IDARTICULOALBARAN =
dbo.VWartAlbaranesOrders.IDARTICULOALBARAN AND
dbo.TBLARTICULOSALBARAN.IDALBARAN =
dbo.VWartAlbaranesOrders.IDALBARAN ON
dbo.TBLVendedores.IDVENDEDOR =
dbo.TBLOrdenesFabricacion.IdVendedor LEFT OUTER JOIN
dbo.TblEstadosFabricacion ON
dbo.TBLOrdenesFabricacion.estado =
dbo.TblEstadosFabricacion.IdEstadoFabricacion
WHERE (CASE WHEN FECHA IS NULL THEN 0 ELSE DATEDIFF(D,
dbo.TBLALBARANES.FECHA, GETDATE()) END <= 4) OR
(CASE WHEN FECHA IS NULL THEN 0 ELSE DATEDIFF(D,
dbo.TBLALBARANES.FECHA, GETDATE()) END IS NULL)
GROUP BY dbo.TBLOrdenesFabricacion.IDCliente,
RIGHT(dbo.TBLOrdenesFabricacion.IDOptiXML, 7),
SUBSTRING(dbo.TBLOrdenesFabricacion.IDOptiXML, 2, 3),
dbo.TBLOrdenesFabricacion.IDOrdenFabricacion,
dbo.TBLOrdenesFabricacion.IDOptiXML, dbo.TBLOrdenesFabricacion.IdVendedor,
dbo.TBLVendedores.NOMBRE,
dbo.TBLOrdenesFabricacion.FechaCreacion,
dbo.TBLOrdenesFabricacion.OjoDerecho,
dbo.TBLOrdenesFabricacion.referencia,
dbo.TBLOrdenesFabricacion.DESCRIPCION, dbo.TBLOrdenesFabricacion.DIAM,
dbo.TBLOrdenesFabricacion.ESF,
dbo.TBLOrdenesFabricacion.CIL, dbo.TBLOrdenesFabricacion.ADIC,
dbo.TBLOrdenesFabricacion.eje,
dbo.TBLOrdenesFabricacion.CANTIDAD,
CASE WHEN IDTinttype <> '0' THEN +
dbo.TBLOrdenesFabricacion.IDTintType + dbo.TBLOrdenesFabricacion.IDTinting1 +
dbo.TBLOrdenesFabricacion.IDTinting2
ELSE '' END, dbo.TBLOrdenesFabricacion.Observaciones,
dbo.TBLOrdenesFabricacion.estado, dbo.TblEstadosFabricacion.NombreEstado,
dbo.TBLOrdenesFabricacion.dataentrega,
dbo.TBLOrdenesFabricacion.NovaDataEntrega,
dbo.TBLOrdenesFabricacion.Descricaonovadata,
dbo.TBLOrdenesFabricacion.Frame_SkuCode,
CONVERT(varchar, dbo.TBLOrdenesFabricacion.IdAlbaran),
dbo.Altra_OutSource.OutSourceName,
CASE WHEN FechaLlegada > dbo.TBLALBARANES.FECHA THEN
FechaLlegada ELSE Fecha END, dbo.TBLOrdenesFabricacion.idOutSource
HAVING (dbo.TBLOrdenesFabricacion.IDOptiXML > '1')
ORDER BY dbo.TBLOrdenesFabricacion.IDCliente,
dbo.TBLOrdenesFabricacion.FechaCreacion,
RIGHT(dbo.TBLOrdenesFabricacion.IDOptiXML, 7),
SUBSTRING(dbo.TBLOrdenesFabricacion.IDOptiXML, 2, 3),
dbo.TBLOrdenesFabricacion.OjoDerecho;

le probléme vient apparement du champ FECHA quand il est null mais pas tout
le temp.
Par ex : SELECT * FROM mavue WHERE client = 123
renvoi 4 ligne avec FECHA NULL sur les 8 dans ce cas cela fonctionne



Si vous postiez la définition SQL de la vue cela nous aiderais !

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Avatar
Fred BROUARD
Modifiez votre requête de façon que les fonction RIGHT et SUBSTRING
n'opérent pas quand cela n'est pas possible (RIGHT ... 7 et SUBSTRING 2, 3)
Avec NULL les fonctions renvoient systématiquement NULL

A +

rdelabergerie a écrit :
Je ne voulais pas le faire au début suite à la taille de la vue mais bon :

SELECT TOP 100 PERCENT dbo.TBLOrdenesFabricacion.IDCliente AS Client,
RIGHT(dbo.TBLOrdenesFabricacion.IDOptiXML, 7) AS CDE,
SUBSTRING(dbo.TBLOrdenesFabricacion.IDOptiXML, 2, 3)
AS Paire, dbo.TBLOrdenesFabricacion.IDOrdenFabricacion AS CdeNum,
dbo.TBLOrdenesFabricacion.IDOptiXML AS CdeXML,
dbo.TBLOrdenesFabricacion.IdVendedor AS Standard,
dbo.TBLVendedores.NOMBRE AS Staandardiste_,
dbo.TBLOrdenesFabricacion.FechaCreacion AS Date,
dbo.TBLOrdenesFabricacion.OjoDerecho AS DG,
dbo.TBLOrdenesFabricacion.referencia AS Référence,
dbo.TBLOrdenesFabricacion.DESCRIPCION AS Produit,
dbo.TBLOrdenesFabricacion.DIAM AS Dia, dbo.TBLOrdenesFabricacion.ESF AS Sph,
dbo.TBLOrdenesFabricacion.CIL AS Cyl,
dbo.TBLOrdenesFabricacion.ADIC AS Addition, dbo.TBLOrdenesFabricacion.eje AS
axe,
dbo.TBLOrdenesFabricacion.CANTIDAD AS Qté,
CASE WHEN IDTinttype <> '0' THEN +
dbo.TBLOrdenesFabricacion.IDTintType + dbo.TBLOrdenesFabricacion.IDTinting1 +
dbo.TBLOrdenesFabricacion.IDTinting2
ELSE '' END AS Colo,
dbo.TBLOrdenesFabricacion.Observaciones AS remarques,
dbo.TBLOrdenesFabricacion.estado AS etape,
dbo.TblEstadosFabricacion.NombreEstado AS etape_,
dbo.TBLOrdenesFabricacion.dataentrega AS Livraison,
dbo.TBLOrdenesFabricacion.NovaDataEntrega AS
NouvelleLivraison, dbo.TBLOrdenesFabricacion.Descricaonovadata AS Raison,
dbo.TBLOrdenesFabricacion.Frame_SkuCode AS Monture,
CONVERT(varchar, dbo.TBLOrdenesFabricacion.IdAlbaran) AS BL,
dbo.TBLOrdenesFabricacion.idOutSource,
dbo.Altra_OutSource.OutSourceName AS Outsource,
CASE WHEN FechaLlegada > dbo.TBLALBARANES.FECHA THEN
FechaLlegada ELSE Fecha END AS Dateliv,
dbo.TBLOrdenesFabricacion.referencia AS Reference,
dbo.TBLOrdenesFabricacion.FechaCreacion AS Datecde
FROM dbo.TBLVendedores RIGHT OUTER JOIN
dbo.TBLALBARANES RIGHT OUTER JOIN
dbo.TBLARTICULOSALBARAN ON dbo.TBLALBARANES.IDALBARAN
= dbo.TBLARTICULOSALBARAN.IDALBARAN RIGHT OUTER JOIN
dbo.VWartAlbaranesOrders RIGHT OUTER JOIN
dbo.TBLOrdenesFabricacion LEFT OUTER JOIN
dbo.Altra_OutSource ON
dbo.TBLOrdenesFabricacion.idOutSource = dbo.Altra_OutSource.idOutSource ON
dbo.VWartAlbaranesOrders.ordenfabricante =
dbo.TBLOrdenesFabricacion.ordenfabricante ON
dbo.TBLARTICULOSALBARAN.IDARTICULOALBARAN =
dbo.VWartAlbaranesOrders.IDARTICULOALBARAN AND
dbo.TBLARTICULOSALBARAN.IDALBARAN =
dbo.VWartAlbaranesOrders.IDALBARAN ON
dbo.TBLVendedores.IDVENDEDOR =
dbo.TBLOrdenesFabricacion.IdVendedor LEFT OUTER JOIN
dbo.TblEstadosFabricacion ON
dbo.TBLOrdenesFabricacion.estado =
dbo.TblEstadosFabricacion.IdEstadoFabricacion
WHERE (CASE WHEN FECHA IS NULL THEN 0 ELSE DATEDIFF(D,
dbo.TBLALBARANES.FECHA, GETDATE()) END <= 4) OR
(CASE WHEN FECHA IS NULL THEN 0 ELSE DATEDIFF(D,
dbo.TBLALBARANES.FECHA, GETDATE()) END IS NULL)
GROUP BY dbo.TBLOrdenesFabricacion.IDCliente,
RIGHT(dbo.TBLOrdenesFabricacion.IDOptiXML, 7),
SUBSTRING(dbo.TBLOrdenesFabricacion.IDOptiXML, 2, 3),
dbo.TBLOrdenesFabricacion.IDOrdenFabricacion,
dbo.TBLOrdenesFabricacion.IDOptiXML, dbo.TBLOrdenesFabricacion.IdVendedor,
dbo.TBLVendedores.NOMBRE,
dbo.TBLOrdenesFabricacion.FechaCreacion,
dbo.TBLOrdenesFabricacion.OjoDerecho,
dbo.TBLOrdenesFabricacion.referencia,
dbo.TBLOrdenesFabricacion.DESCRIPCION, dbo.TBLOrdenesFabricacion.DIAM,
dbo.TBLOrdenesFabricacion.ESF,
dbo.TBLOrdenesFabricacion.CIL, dbo.TBLOrdenesFabricacion.ADIC,
dbo.TBLOrdenesFabricacion.eje,
dbo.TBLOrdenesFabricacion.CANTIDAD,
CASE WHEN IDTinttype <> '0' THEN +
dbo.TBLOrdenesFabricacion.IDTintType + dbo.TBLOrdenesFabricacion.IDTinting1 +
dbo.TBLOrdenesFabricacion.IDTinting2
ELSE '' END, dbo.TBLOrdenesFabricacion.Observaciones,
dbo.TBLOrdenesFabricacion.estado, dbo.TblEstadosFabricacion.NombreEstado,
dbo.TBLOrdenesFabricacion.dataentrega,
dbo.TBLOrdenesFabricacion.NovaDataEntrega,
dbo.TBLOrdenesFabricacion.Descricaonovadata,
dbo.TBLOrdenesFabricacion.Frame_SkuCode,
CONVERT(varchar, dbo.TBLOrdenesFabricacion.IdAlbaran),
dbo.Altra_OutSource.OutSourceName,
CASE WHEN FechaLlegada > dbo.TBLALBARANES.FECHA THEN
FechaLlegada ELSE Fecha END, dbo.TBLOrdenesFabricacion.idOutSource
HAVING (dbo.TBLOrdenesFabricacion.IDOptiXML > '1')
ORDER BY dbo.TBLOrdenesFabricacion.IDCliente,
dbo.TBLOrdenesFabricacion.FechaCreacion,
RIGHT(dbo.TBLOrdenesFabricacion.IDOptiXML, 7),
SUBSTRING(dbo.TBLOrdenesFabricacion.IDOptiXML, 2, 3),
dbo.TBLOrdenesFabricacion.OjoDerecho;

le probléme vient apparement du champ FECHA quand il est null mais pas tout
le temp.
Par ex : SELECT * FROM mavue WHERE client = 123
renvoi 4 ligne avec FECHA NULL sur les 8 dans ce cas cela fonctionne


Si vous postiez la définition SQL de la vue cela nous aiderais !

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************