表ruletab中的字段A,字段U,都是nvarchar类型
我想用动态SQL语句实现如下功能:
update ruletab set A = '?' where U = '1'
-----------------
动态语句如下:
/*声明变量*/
declare @U varchar(10),@delcol varchar(10),
@sql varchar(8000),@test varchar(10),@str char(1)
set @U='U'
set @delcol='A'
set @str='?'
set @test='1'
set @sql=''
set @sql='update ruletab set '+@delcol+'='+@str+' where '+@U+' = '+@test
select @sql
exec(@sql)错误:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '?' 附近有语法错误。
----------------------------
如果将set @str='?'改成set @str='m'错误:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'm' 无效。
----------------------------
如果将set @str='?'改成set @str="?"错误:
服务器: 消息 207,级别 16,状态 3,行 6
列名 '?' 无效。
----------------------------
请问:
为什么错误?
如何才能实现:update ruletab set A = '?' where U = '1'

解决方案 »

  1.   

    declare @U varchar(10),@delcol varchar(10),
    @sql varchar(8000),@test varchar(10),@str char(1)
    set @U='U'
    set @delcol='A'
    set @str='?'
    set @test='1'
    set @sql=''
    set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''
    select @sql
    exec(@sql)
      

  2.   

    --这样试一下
    declare @U varchar(10),@delcol varchar(10),
    @sql varchar(8000),@test varchar(10),@str char(1)
    set @U='U'
    set @delcol='A'
    set @str='?'
    set @test='1'
    set @sql=''
    set @sql='update ruletab set '+@delcol+'='+char(39)+@str+char(39)+' where '+@U+' = '+char(39)+@test+char(39)
    select @sql
    exec(@sql)
      

  3.   

    declare @U varchar(10),@delcol varchar(10),
    @sql varchar(8000),@test varchar(10),@str char(1)
    set @U='U'
    set @delcol='A'
    set @str='?'
    set @test='1'
    set @sql=''
    set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''
    select @sql
    exec(@sql)
      

  4.   


    declare @U varchar(10),@delcol varchar(10),
    @sql varchar(8000),@test varchar(10),@str char(1)
    set @U='U'
    set @delcol='A'
    set @str='?'
    set @test='1'
    set @sql=''
    set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''
    select @sql
    exec(@sql)組合動態語句的時候,一個'用兩個''大體
      

  5.   

    问题在这一句:
    set @sql='update ruletab set '+@delcol+'='+@str+' where '+@U+' = '+@test因为对字符串的比较操作,需要对字符串加上'',在动态中,也即是你的最终@sql中的结果需要有''。具体的写法是,需要其中出现一个'的就用两个'',这一点很重要!改为如下,应该可以:
    set @sql='update ruletab set '+@delcol+'='''+@str+''' where '+@U+' = '''+@test+''''