动态SQL语句中可以Update,可能是你写错了
得到字段的值要用select语句

解决方案 »

  1.   

    set @strsql = 'insert into  @temptbl  
            select id,'+@strfiled+ ' from  tbl  '
    中的@strfiled应为@strfield只要@temptbl中有两个数据项,且数据类型正确,就没有错误了。
      

  2.   

    declare @strfield    varchar(3),
            @strsql      varchar(1000)
    set @strfield = Col_name(object_id('tbl'),@i)
    set @strsql = 'update xx set '+@strfield+'=tbl.'+@strfield+' from  tbl  where tbl.id=xx.id'
    exec(@strsql)
      

  3.   

    动态SQL语句中可以做Update操作,检查你的UPDATE语句是不是正确.
      

  4.   

    大力,再帮我看看:
    其实我的应用很简单,只是根据@i的值修改表中ai字段的值而已,如:declare @i int,
            @strfield    varchar(3),
            @strsql      varchar(1000)
    set @i=2
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+@i+'  where id<3'
    exec(@strsql)
    服务器: 消息 245,级别 16,状态 1,行 6
    将 varchar 值 'update tbl set a2=a2+' 转换为数据类型为 int 的列时发生语法错误。如果将语句改为:
    declare @i int,
            @strfield    varchar(3),
            @strsql      varchar(1000)
    set @i=2
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+@i where id<3'
    exec(@strsql)还是错:
    服务器: 消息 137,级别 15,状态 2,行 1
    必须声明变量 '@i'。是不是,EXEC不能带变量赋值的Update语句?
      

  5.   

    declare @i int,
            @strfield    varchar(3),
            @strsql      varchar(1000)
    set @i=2
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+cast(@i as varchar(10)+'  where id<3'
    exec(@strsql)
      

  6.   

    declare @i int,
            @strfield    varchar(3),
            @strsql      varchar(1000)
    set @i=2
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+cast(@i as varchar(10)+'  where id<3'
    exec(@strsql)
      

  7.   

    大力:
    不行啊。我当时是转了几个弯才实现了这句功能的。不是不Update不行啊!服务器: 消息 170,级别 15,状态 1,行 6
    第 6 行: '+' 附近有语法错误。
      

  8.   


    将大力Update语句中的“Cast”改为“Convert”函数就运行正确,为什么?
      

  9.   

    各位:还是不行啊。
    如果我要将@strfield字段的值赋给某个变量比如@j,就不行了。
    如:
    declare @i           tinyint,
            @strfield    varchar(3),
            @strsql      varchar(1000),
            @j           smallint
    set @i=2
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = 'Select '+@j+'='+@strfield+' from tbl where id=3'
    exec(@strsql)
    print @j就出错了!
      

  10.   

    set @strsql = N'Select '+@j+'='+@strfield+' from tbl where id=3'
    exec sp_executesql  @strsql, N'@j smallint output',@j output
    print @j
      

  11.   

    谢谢登山。可是:declare @i          tinyint,
            @strfield   varchar(3),
            @strsql     varchar(1000),
            @j          tinyintset @i=3
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = N'Select '+@j+'='+@strfield+' from tbl where id=3'
    exec sp_executesql  @strsql, N'@j smallint output',@j output
    print @j服务器: 消息 245,级别 16,状态 1,行 8
    将 nvarchar 值 'Select ' 转换为数据类型为 tinyint 的列时发生语法错误。好像还是那句 set @strsql赋值语句有问题??????
      

  12.   

    exec(@strsql)执行之前用Print @strsql,检查UPDATE语句有没有问题.
      

  13.   

    Print @strsql 为Null,
    原因是 set @strsql = 'Select '+@j+'='+@strfield+' from tbl where id=3'中,
    @j的值为Null(因为我要对@j赋值啊)大虾们,帮帮忙,帮我调调啊!
      

  14.   

    declare @i           tinyint,
            @strfield    varchar(3),
            @strsql      nvarchar(1000),
            @j           smallint
    set @i=2
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = N'Select @j='+@strfield+' from tbl where id=3'
    exec sp_executesql @strsql,N'@j int output',@j output
    print @j
      

  15.   

    declare @i          tinyint,
            @strfield   varchar(3),
            @strsql     varchar(1000),
            @j          tinyintset @i=3
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = N'Select @j='+@strfield+' from tbl where id=3'
    exec sp_executesql  @strsql, N'@j smallint output',@j output
    print @j
      

  16.   

    declare @i          tinyint,
            @strfield   varchar(3),
            @strsql     varchar(1000),
            @j          tinyintset @i=3
    set @strfield = Col_name(object_id('tbl'),@i+1)
    set @strsql = N'Select @j='+@strfield+' from tbl where id=3'
    exec sp_executesql  @strsql, N'@j smallint output',@j output
    print @j