2017-10-09 12 views
-1

J'ai une procédure stockée insertvalue avec ces trois paramètres:paramètre d'entrée passe comme nom de colonne pour mettre à jour une valeur de colonne dans la procédure stockée

@stdrollno int, 
@sem int, 
@IsCheck int, 
@subjectname varchar(100), 
@test varchar(100) 

J'ai une table demo où il y a table nommée defaulter où il y a une colonne

[Microprocessor th] varchar(50) 
[Structured and Object Oriented Analysis and Design th] varchar(50) 

dont la valeur je dois mettre à jour.

Donc dans ma procédure stockée insertvalue, j'ai écrit ce code SQL:

if(@sem = 5) 
    BEGIN 
     BEGIN 
      declare @sql3 nvarchar(500); 
      set @sql3 = 'update TEdefaulters 
         set ['+CAST(@test as nvarchar(100))+'] = ['+CAST(@test as nvarchar(100))+'] + '+CAST(@IsCheck as nvarchar(100))+' 
         where stdrollno = ' +CAST(@stdrollno as nvarchar(100)); 

      exec sp_executesql @sql3 
      END 
      BEGIN 
      update TEdefaulters 
      set total_theory = total_theory + CONVERT(INT, @ischeck) 
      where stdrollno = @stdrollno 
      END 
      BEGIN 
      update TEdefaulters 
      set total_attendance = total_attendance + CONVERT(INT, @ischeck) 
      where stdrollno = @stdrollno 
      END 
      BEGIN 
       update TEdefaulters 
       set theory_percentage = (cast((Select total_theory from TEdefaulters where [email protected]) as float)/(cast((Select total_theory from TEdefaulters where stdname='total') as float))) * 100 
       where [email protected] 
      END 
      BEGIN 
       update TEdefaulters 
       set attendance_percentage = (cast((Select total_attendance from TEdefaulters where [email protected]) as float) /(cast((Select total_attendance from TEdefaulters where stdname='total')as float))) * 100 
       where [email protected] 
      END 
     END 

mais il ne fonctionne pas, il provoque une erreur Les valeurs dont les travaux:

exec inserttheoryattendance 5 , 5 , 1 , 'Microprocessor', 'Microprocessor th' 

la valeur qui ne fonctionne pas est

exec inserttheoryattendance 5 , 5 , 1 , 'Structured and Object Oriented Analysis and Design', 'Structured and Object Oriented Analysis and Design th' 

Impossible de convertir nvarchar int

+0

Pourquoi déclarez-vous @sql comme int? – Uueerdo

+0

Copie possible de [SQL dynamique ne convertissant pas VARCHAR en INT (ne devrait pas de toute façon)] (https://stackoverflow.com/questions/15684701/dynamic-sql-not-converting-varchar-to-int-shouldnt-anyway) –

+0

essayé cette logique, il ne fonctionne pas la conversion ne fonctionne pas – Prakash

Répondre

0

@sql nvarchar déclare (50);

50 caractères est trop court pour votre chaîne SQL. Essayez de le changer en nvarchar(500)

+0

oui, je l'ai fait plus tôt et cela a fonctionné avant. mais certains pour certaines chaînes fonctionnent et pour certains pas, surtout pour les plus gros. Les données sont mises à jour, mais une erreur est générée: Les données chaîne ou binaire sont tronquées. La déclaration a été interrompue .. cela se produit après la mise à jour des données dans la table – Prakash

+0

Alors, comment puis-je le corriger? Parce que cela fonctionne pour certaines données et d'autres non – Prakash

+0

comment les données peuvent-elles être erronées?certaines données sont insérées correctement, pour que certaines données soient insérées et ensuite jette une erreur – Prakash