--测试:
drop table t1
go
create table t1(a varchar(30))
declare @str1 varchar(30),@cmd_str  nvarchar(200)
set @str1 = 'abc'''''+'xxx'+'''''def'
select  @cmd_str = 'insert  into  t1 values ('''+@str1+''')'
--print @cmd_strexec (@cmd_str)
select * from t1

解决方案 »

  1.   

    --这样
    declare @str1 varchar(30),@cmd_str  nvarchar(200)
    set @str1 = 'abc'''+'xxx'+'''def'
    select  @cmd_str = 'insert  into  a  values ('''+replace(@str1,'''','''''')+''')'
    exec (@cmd_str)
      

  2.   

    create table a(col1 varchar(30))
    declare @str1 varchar(30),@cmd_str  nvarchar(200)
    set @str1 = 'abc'''''+'xxx'+'''''def'
    select  @cmd_str = 'insert  into  a values ('''+@str1+''')'
    --print @cmd_strexec (@cmd_str)
    select * from a
    /*
    col1                           
    ------------------------------ 
    abc'xxx'def(所影响的行数为 1 行)*/drop table a
    go
      

  3.   

    declare @str1 varchar(30)
    declare @cmd_str  nvarchar(200)
    set @str1 = 'abc''' + 'xxx' + '''def'
    set @str1 = replace(@str1 , '''','''''')
    select  @cmd_str = 'insert  into  a(sbh)  values ('' '+@str1+' '')'exec (@cmd_str)
      

  4.   

    --既然表名是固定的,没必要吧,直接这样就行啦:declare @str1 varchar(30)
    set @str1 = 'abc'''+'xxx'+'''def'
    insert  into  a  values (@str1)
      

  5.   

    declare @str1 varchar(30),@cmd_str  nvarchar(200)
    set @str1 = 'abc'''+'xxx'+'''def'
    select  @cmd_str = 'insert  into  a  values ('''+@str1+''')'
    exec (@cmd_str)
      

  6.   

    --如果表名不固定,也可以用下面的方法,就可以不避过单引号的问题了declare @str1 varchar(30),@cmd_str  nvarchar(1000)
    set @str1 = 'abc'''+'xxx'+'''def'
    select  @cmd_str = 'insert  into  a  values (@str1)'
    exec sp_executesql @cmd_str,N'@str1 varchar(30)',@str1
      

  7.   

    谢谢各位大侠,你们的方法我都试过了,谢谢!但根据我的情况,我觉得zjcxc(邹建) 的方法更适合我,因为我得SQL比较复杂,不适合将其中的'改成''',还是谢谢大家!