SQL存储过程前面后面的几句代码是什么意思,为什么要加这段。
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO crate  proc proc_name
---
------
-----
----
GO 
SET QUOTED_IDENTIFIER OFF 
GO 
SET ANSI_NULLS ON 
GO 

解决方案 »

  1.   

    数据库相关配置选项“当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。”先说说什么是标识符,举个例子,如果创建了一个叫做USER的数据库表,则直接用SQL语句“SELECT * FROM USER”做查询时会报错:“在关键字 'USER' 附近有语法错误。”,也就是USER被视作SQL SERVER的关键字处理了,而不是被认为是一个表或视图。但如果修改为“SELECT * FROM [USER]”就没问题了。此处的方括号就是标识符。标识符的作用就是告诉数据库引擎,此处是一个数据库对象(比如是一个表、视图、存储过程等),而不是一个关键字。
      

  2.   


     SET ANSI_NULLS 为 ON 时,如果比较中有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。这是因为未知值不能与其他任何值进行逻辑比较。这种情况发生在一个表达式与 NULL 单词进行比较,或者两个表达式相比,而其中一个表达式取值为 NULL 时。例如,当 ANSI_NULLS 为 ON 时,以下比较总是生成 UNKNOWN: