A. 使用加引号的标识符设置和保留字对象名
以下示例显示 SET QUOTED_IDENTIFIER 设置必须为 ON,而且表名内的关键字必须在双引号内,才能创建和使用具有保留关键字名称的对象。 复制代码 
SET QUOTED_IDENTIFIER OFF
GO
-- An attempt to create a table with a reserved keyword as a name
-- should fail.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GOSET QUOTED_IDENTIFIER ON;
GO-- Will succeed.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GOSELECT "identity","order" 
FROM "select"
ORDER BY "order";
GODROP TABLE "SELECT";
GOSET QUOTED_IDENTIFIER OFF;
GO
 

解决方案 »

  1.   

    默认是off的,这个可以通过如下的语句,来查询:--0表示off,1表示on
    select name,is_quoted_identifier_on
    from sys.databases设为ON:标识符可以用双引号分隔,而字符串还是用过单引号来分隔的:
    SET QUOTED_IDENTIFIER on
    gocreate table "table"(a int)
      

  2.   

    当在数据库中新建一个名字是USER的表的时候,常常会带来一些麻烦,因为USER是SQL中的关键字,但是上面的几个语句不会报错。再说一个概念:标示符是SQL中的中括号[]。  当SET QUOTED_IDENTIFIER值为ON时,双引号内的字符被当作是数据库对象。就是说双引号" "和标识符[]效果是一样样的,他们都表示引用的字符是数据库对象。单引号'表示字符串的边界。  当SET QUOTDE_IDENTIFIER OFF时,双引号被解释为字符串的边界,和单引号的作用是类似的。就是说双引号"不能当做标识符使用,但是可以当做字符边界,和单引号'的效果是一样样的。