declare @sql varchar(1000)
set @sql=N'select '''+convert(varchar(10),getdate(),112)+ ''''
print @sql什么执行的结果是
select '20101118'-------------------declare @sql varchar(1000)
set @sql=N'select convert(varchar(10),getdate(),112)'
print @sql
执行的结果是 
select convert(varchar(10),getdate(),112)  这个我明白,N''内的是字符串不明白如果要想得到第一种结果为什么要用'''+convert(varchar(10),getdate(),112)+ '''-------------------------------
declare @sql varchar(1000)
set @sql=N'select '''''+convert(varchar(10),getdate(),112)+''''''
print @sql执行结果是
select ''20101118''比第一种结果在日期前后多了''这个又是为什么我有点晕。

解决方案 »

  1.   

    --动态sql语句基本语法
     
    1 :普通SQL语句可以用Exec执行 eg: Select * from tableName 
    Exec('select * from tableName') 
    Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: 
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句正确 3. 输出参数 
    declare @num int, 
    @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
    @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  2.   

    declare @sql varchar(1000)
    set @sql=N'select convert(varchar(10),getdate(),112)'
    print @sql
    /*
    select convert(varchar(10),getdate(),112)
    */exec(@sql)
    /*
    ---------- 
    20101118
    */
      

  3.   

    字符串内,两个单引号代表一个单引号
    SELECT 'A','A''B','A''B'''字符串间的连接用+号
    SELECT 'A'+'B'如果左边字符串的最后一个字符正好是单引号,你就会看到三个单引号
    SELECT 'A'''+'B'如果正好右边的第一个字符也是单引号,你就会看到六个单引号
    SELECT 'A'''+'''B'
      

  4.   

    declare @sql varchar(1000)
    set @sql=N'select ''' + convert(varchar(10),getdate(),112) + ''''
    print @sql
    /*
    select '20101118'
    */exec(@sql)
    /*
    ---------- 
    20101118
    */
    set @sql=N'select '''''''' + convert(varchar(10),getdate(),112) + '''''''''
    print @sql
    /*
    select '''' + convert(varchar(10),getdate(),112) + ''''
    */exec(@sql)
    /*
    ------------ 
    '20101118'*/
      

  5.   

    因为convert(varchar(10),getdate(),112)相当于变量,只有select 执行时才有值,
    如果不执行,只能当成字符串了。
    但你要的结果中 含有单引号,只能先字符串的加,+,组合起来。
      

  6.   

    最近写动态sql写的比较多,刚搞明白这个引号的问题。其实很简单,想要在两个单引号之间得到引号的话,可以使用两个连续的单引号表示为一个单引号。