当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。有关更多信息,请参见使用标识符。文字可以由单引号或双引号分隔。当 SET QUOTED_IDENTIFIER 为 ON 时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 ('') 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。当 SET QUOTED_IDENTIFIER 为 OFF(默认值)时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。
你这里'文本'用作字串用,又不是做标识符,加什么双引号即便设置了
SET QUOTED_IDENTIFIER OFF
--一样用
SELECT N'文本'
--不要自己把自己搞混了。 "",[]用来定界标识符(sqlserver对象), ''用来定界值(varchar,nvarchar,datetime等)
SET QUOTED_IDENTIFIER ON 

解决方案 »

  1.   

    off 情况下,双引号可以表来定界值,单引号也可以。on情况下,双引号,[]只能用来定界标识符,值只能用单引定界
      

  2.   

    其实我想用的是比如要插入一个It's,那么要用'It''s'
    但是如果用SET QUOTED_IDENTIFIER OFF
    就可以用"It's",但是这种前面不能加N
      

  3.   

    有什么区别呢?写c#,java代码的总不能因为字串中间要出现"而不用\"或用chr函数,而自己去构造一个定界符吧。转义是正常的,要适应。