none
Conversion failed when converting the varchar value '1.3' to data type int. RRS feed

  • Soru

  • 	WITH PageCatTree ( ID, ParentID, ParentName, DomainID,CreatedByID,CreatedDate,ModifiedByID,ModifiedDate,DeletedByID,DeletedDate,IsDeleted,LanguageID,[Name],PageUrl,[Order],IsActive,IndexNo,IndexLevel,IndexLevel2) AS
    	(
    		SELECT 
    			tPageCategory.ID, 
    			tPageCategory.ParentId, 
    			CASE
    				WHEN tPageCategory.ParentID = 0 THEN ''
    				ELSE (Select [Name] From tPageCategory_Detail Where PageCategoryID = tPageCategory.ParentID AND LanguageId = 1 )
    			END AS ParentName,
    			tPageCategory.DomainID, 
    			tPageCategory.CreatedByID, 
    			tPageCategory.CreatedDate, 
    			tPageCategory.ModifiedByID, 
    			tPageCategory.ModifiedDate, 
    			tPageCategory.DeletedByID, 
    			tPageCategory.DeletedDate, 
    			tPageCategory.IsDeleted, 
    			tPageCategory_Detail.LanguageID, 
    			--tPageCategory_Detail.Name, 
    			CASE
    				WHEN tPageCategory.ParentID<>0 THEN tPageCategory_Detail.Name
    				ELSE tPageCategory_Detail.Name
    			END AS Name,
    			tPageCategory_Detail.PageUrl,
    			tPageCategory_Detail.[Order], 
    			tPageCategory_Detail.IsActive, 
    			CAST(ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC) as varchar(255)),
    			CAST(ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC) as INT), 
    			CAST(ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC) as DECIMAL(10,2))    
    		FROM 
    			tPageCategory 
    			INNER JOIN tPageCategory_Detail ON tPageCategory.ID = tPageCategory_Detail.PageCategoryId 
    		WHERE 
    			tPageCategory.ParentID = 0 
    			AND tPageCategory.IsDeleted = 0
    			AND tPageCategory.DomainID = 1
    			AND tPageCategory_Detail.LanguageID = 1
    
    		UNION ALL 
    
    		SELECT 
    			tPageCategory.ID, 
    			tPageCategory.ParentId, 
    			CASE
    				WHEN tPageCategory.ParentID=0 THEN ''
    				ELSE (Select [Name] From tPageCategory_Detail Where PageCategoryID = tPageCategory.ParentID AND LanguageId = 1 )
    			END AS ParentName,
    			tPageCategory.DomainID, 
    			tPageCategory.CreatedByID, 
    			tPageCategory.CreatedDate, 
    			tPageCategory.ModifiedByID, 
    			tPageCategory.ModifiedDate, 
    			tPageCategory.DeletedByID, 
    			tPageCategory.DeletedDate, 
    			tPageCategory.IsDeleted, 
    			tPageCategory_Detail.LanguageID, 
    			--tPageCategory_Detail.Name,  
    			CASE
    				WHEN tPageCategory.ParentID<>0 THEN tPageCategory_Detail.Name
    				ELSE tPageCategory_Detail.Name
    			END AS Name,
    			tPageCategory_Detail.PageUrl,
    			tPageCategory_Detail.[Order], 
    			tPageCategory_Detail.IsActive, 
    			CAST(PageCatTree.IndexNo +'.' + CAST(ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC) as varchar(255)) as varchar(255)) ,
    			CAST(PageCatTree.IndexNo as INT) ,
    			CASE 
    				WHEN (ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC)) < 10 THEN
    					CONVERT(DECIMAL(10,2), CAST(PageCatTree.IndexNo + '.0' + CAST(ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC) AS VARCHAR(255)) AS VARCHAR(255)))
    				ELSE
    					CONVERT(DECIMAL(10,2), CAST(PageCatTree.IndexNo + '.' + CAST(ROW_NUMBER() OVER (ORDER BY tPageCategory_Detail.[Order] ASC) AS VARCHAR(255)) AS VARCHAR(255)))
    			END 
    			
    		FROM 
    			tPageCategory 
    			INNER JOIN tPageCategory_Detail ON tPageCategory.ID = tPageCategory_Detail.PageCategoryId 
    			JOIN PageCatTree ON PageCatTree.ID = tPageCategory.ParentID 
    		WHERE
    			tPageCategory.IsDeleted = 0
    			AND tPageCategory.DomainID = 1
    			AND tPageCategory_Detail.LanguageID = 1
    	) 
    	SELECT * FROM PageCatTree ORDER BY IndexLevel ASC, IndexLevel2 ASC, IndexNo ASC, [Order]	
    

    Merhaba Arkadaşlar,

    Yukarıdaki sorgumda beklenmedik bir hata aldım nasıl çözecegimi bilmiyorum benden önce çalışan arakadaşlar yazmışlar 

    Hata : Conversion failed when converting the varchar value '1.3' to data type int.

    bu şekilde bir hata msj alıyorum bunu nasıl düzelte bilirim acaba ? 

    10 Ocak 2012 Salı 08:54

Yanıtlar

  • Ahh ayrıca şu da var, "int" veritipi tam sayıları alır, ondalıklı sayıları kaydedemezsin. Ondalıklı sayılar için DECIMAL, FLOAT gibi veritiplerini kullanmayı düşünmelisin. Hata mesajına göre INT'e çevirmeye çalıştığın sayı ondalıklı...
    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com
    10 Ocak 2012 Salı 20:48

Tüm Yanıtlar

  • Arkadaşlar çözümü olan yokmu acaba ?
    10 Ocak 2012 Salı 15:23
  • Sorun bence Local Settings ile ilgili. Tahminime göre bu hatayı yerel dili (Windows Regional Settings'teki) Türkçe olan bir makinede aldın. Çünkü Türkçe ayarlarına göre "1.5" değil, "1,5"tir o değer. Eğer ayar "English (U.S.)" olsaydı, o zaman hata almayacaktın diye düşünüyorum.

    Yani bu hatayı alma nedenin Regional Settings, bu şekilde, bu ayara göre öyle ya da böyle bu hatayı alabilirsin ve bunun SQL Server ile doğrudan bir ilgisi yok.


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com
    10 Ocak 2012 Salı 20:45
  • Ahh ayrıca şu da var, "int" veritipi tam sayıları alır, ondalıklı sayıları kaydedemezsin. Ondalıklı sayılar için DECIMAL, FLOAT gibi veritiplerini kullanmayı düşünmelisin. Hata mesajına göre INT'e çevirmeye çalıştığın sayı ondalıklı...
    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3, SQL Server MVP | http://ekremonsoy.blogspot.com
    10 Ocak 2012 Salı 20:48
  •  

    Merhaba hocam.

     

    Söylemiş olduğunuz çözümleri hemen uygulayıp sonucu siz bildirecegim..

    11 Ocak 2012 Çarşamba 10:13