请大家帮看看这存储过程的问题
CREATE   PROCEDURE      UP 
 ( 
 	@A_L   nvarchar(20)  	 
 )   
 AS 
 	declare   @LF   bit 
 	declare   @sql         varchar(1024) 
                                        declare   @Update   int      
                                        set         @Update         =         0;    
 	select   @LF=LF   from   A   WHERE   ID=   @A_L          
                                        IF   @LF   IS   NOT   NULL 
 	BEGIN 
 	select            @sql         =    'UPDATE   A   SET   state   =   2   WHERE   (ID   =   @A_L) '                                                     	                                    
                                        select            @Update         =         1;            
 	END      
 	   if         @Update         =         1       
                                                                exec(@sql);            
 UPDATE不起作用。问题出在哪里? 
------解决方案--------------------改成  
 select    @sql   =  'UPDATE A SET state = 2 WHERE ID =  ' + convert(varchar,@A_L)   
 或者 
 exec(@sql) 改成 exec sp_executesql @sql,N '@A_L int ',@A_L   
 两者选1     
------解决方案--------------------看错了你的数据类型    
 @sql 类型改成 
 declare @sql nvarchar(1024) -- 这个必须是 nvarchar 类型,然后 
 exec(@sql)  
 改成  
 exec sp_executesql @sql,N '@A_L nvarchar(20) ',@A_L 
------解决方案--------------------print 出来看看 
 然后执行print出来的语句,看看如何  
------解决方案--------------------CREATE PROCEDURE  UP 
 ( 
 @A_L nvarchar(20) 
 ) 
 AS 
 declare @LF bit 
 declare @sql nvarchar(1024)  /*声明为nvarchar类型*/ 
 select @LF=LF from A WHERE ID= @A_L    
 IF @LF IS NOT NULL 
 BEGIN 
     set @sql = N 'UPDATE A SET state = 2 WHERE (ID = @A_L) ' 
     EXEC sp_executesql @sql,N '@A_L nvarchar(20) ',@A_L 
 END 
 GO