Échec de la Conversion lors de la conversion de la valeur varchar " _1 " pour le type de données int
Essayez d'exécuter cette requête, j'ai écrit pour retourner une liste de fichiers dans un cours, mais l'exécution de cette erreur, qu'un échec de la conversion lors de la conversion de la valeur varchar " _1 " pour le type de données int.
SELECT cm.course_id, cc.title title, cc.dtmodified dtmodified, MIN(xf.FILE_SIZE) file_size, MIN(crl.resource_id) resource_id, MIN(xu.FULL_PATH) full_path
FROM BBLEARN.dbo.cms_resource_link crl
INNER JOIN BBLEARN.dbo.course_contents cc ON cc.pk1 = crl.parent_pk1
INNER JOIN BBLEARN.dbo.course_main cm ON cm.pk1 = crl.crsmain_pk1
INNER JOIN BBLEARN.dbo.course_users cu ON cm.pk1 = cu.crsmain_pk1
INNER JOIN BBLEARN.dbo.users u ON cu.users_pk1 = u.pk1
INNER JOIN BBLEARN_CMS_DOC.dbo.XYF_FILES xf ON crl.resource_id = xf.ENTRY_ID + '_1'
INNER JOIN BBLEARN_CMS_DOC.dbo.XYF_URLS xu ON xu.FILE_ID = xf.FILE_ID
INNER JOIN BBLEARN_CMS_DOC.dbo.XYF_FILES xf2 ON xu.PARENT_ID = xf2.FILE_ID
WHERE crl.parent_data_type='content'
AND cu.role='P'
AND crl.storage_type='PUBLIC'
AND xf.FILE_TYPE_CODE='F'
AND (LOWER(xu.FILE_NAME) LIKE N'%.mov%' or LOWER(xu.FILE_NAME) LIKE N'%.avi%' or LOWER(xu.FILE_NAME) LIKE N'%.wm%' or LOWER(xu.FILE_NAME) LIKE N'%.mp%' or LOWER(xu.FILE_NAME) LIKE N'%.rm%' or LOWER(xu.FILE_NAME) LIKE N'%.flv%' or LOWER(xu.FILE_NAME) LIKE N'%.amr%' or LOWER(xu.FILE_NAME) LIKE N'%.aif%' or LOWER(xu.FILE_NAME) LIKE N'%.aup%' or LOWER(xu.FILE_NAME) LIKE N'%.m4%' or LOWER(xu.FILE_NAME) LIKE N'%.wav%' or LOWER(xu.FILE_NAME) LIKE N'%.swf%')
AND xu.FULL_PATH NOT LIKE '/internal/%'
AND NOT EXISTS (
SELECT 1 FROM BBLEARN.dbo.cms_resource_link
WHERE crsmain_pk1 = crl.crsmain_pk1
AND parent_pk1 = crl.parent_pk1
AND parent_data_type='content'
AND resource_id = xf2.ENTRY_ID + '_1' )
GROUP BY cm.course_id, cc.pk1, cc.title, cc.dtmodified ORDER BY 1;
Qui s'affiche dans la ligne 7 et 21, je crois, où il y a la concaténation de xf.ENTRY_ID + '_1'
et xf2.ENTRY_ID + '_1'
Vous devez vous connecter pour publier un commentaire.
Depuis
xf2.ENTRY_ID
est unINT
, SQL ne va pas essayer de concaténer les valeurs, mais les ajouter ensemble. Vous avez besoin de convertir explicitement lesINT
à unVARCHAR
, ouCHAR
afin de les concaténer.Changement
À
Et
À
Je suis à la définition d'un
VARCHAR(20)
commeENTRY_ID
pourrait être deBIGINT
type de données (même si je pense que vous devriez avoir beaucoup trop de lignes dans l'ordre à besoin de 20 chiffres id longs...TIMYINT
,SMALLINT
,INT
ouBIGINT
...Alors, quelle serait la meilleure pour le cas?VARCHAR(12)
pourINT
mais si il pourrait êtreBIGINT
à 20 doit être sûr.SELECT TOP (10) name, CONVERT(VARCHAR, name) FROM sys.all_objects WHERE LEN(name) > 30;
de l'essayer.Vous jette de la xf.ENTRY_ID et xf2.ENTRY_ID de type varchar avec appropirate gamme maintenant im en utilisant la longueur Maxi pour la même chose. J'espère que votre code fonctionne.
Comme ceci: