日期:2014-05-18  浏览次数:20512 次

请大家帮看看这存储过程的问题
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