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不起作用。问题出在哪里?

解决方案 »

  1.   

    @update = 1 吗?
    print出来看看阿
      

  2.   

    select @sql = 'UPDATE A SET state = 2 WHERE (ID ='''+@A_L+''')'
      

  3.   


    select    @sql   = 'UPDATE A SET state = 2 WHERE (ID = ''' + @A_L + ''')'
      

  4.   

    改成 
    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
      

  5.   

    @update = 1 。
    上面的办法都不行。
    直接改成
    select    @sql   = 'UPDATE A SET state = 2 WHERE ID =232 ’
    都不行。。
    改成
    select    @sql   =‘SELECT * FROM A WHERE (ID = 232 )’
    有数据输出
      

  6.   

    看错了你的数据类型 @sql 类型改成
    declare @sql nvarchar(1024) -- 这个必须是 nvarchar 类型,然后
    exec(@sql) 
    改成 
    exec sp_executesql @sql,N'@A_L nvarchar(20)',@A_L
      

  7.   

    看错了你的数据类型 @sql 类型改成
    declare @sql nvarchar(1024) -- 这个必须是 nvarchar 类型,然后
    exec(@sql) 
    改成 
    exec sp_executesql @sql,N'@A_L nvarchar(20)',@A_L
    -------------
    改了。用查询分析器测试..无效
      

  8.   

    print 出来看看
    然后执行print出来的语句,看看如何 
      

  9.   

    执行print出来的语句是有效果的。用查询分析器测试存储过程。。切是无效
      

  10.   

    问题应该在。exec(@sql) 改成exec sp_executesql @sql,N'@A_L nvarchar(20)',@A_L都不行。
    把@sql=SELECT *FROM A WHERE (ID = @A_L)
    用查询分析器测试..有输出数据。UPDATE 无法修改
      

  11.   

    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
      

  12.   

    搞清楚问题了。我发现无论怎么用查询分析器测试都是无效的。
    直接在企业管理器中执行 UP @A_L=111
    就有效