当前位置:数据库 > SQLServer >>

sqlserver 存储过程 菜鸟求助 非技术性问题很简单

学习存储过程 帮我解释一下这段开始的意思是啥 最好每句都解释一下 谢谢啊 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[sp_XXXX] @YearMonthDate NVARCHAR(10) --需要统计的月份 AS DECLARE @sql NVARCHAR(4000) 最主要是开始那几句: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[sp_XXXX] (这句不明白) DECLARE @sql NVARCHAR(4000) 这句申明变量吧??
答案:--指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 SQL-92 遵从行为。
set ANSI_NULLS ON
--使 Microsoft® SQL Server™ 遵从关于引号分隔标识符和文字字符串的 SQL-92 规则。
set QUOTED_IDENTIFIER ON
/*GO 表示一批 T-SQL 语句结束,GO 之后的 T-SQL 语句属于另一个批处理的范围,在 T-SQL 所有语句的最后都默认有一个 GO。但是,请注意 GO 不是 T-SQL 语句,而只是一个能被SQL Server 实用工具识别的命令。
*/
go
--修改 sp_XXXX存储过程
ALTER PROCEDURE [dbo].[sp_XXXX]
--定义一个局部变量 @YearMonthDate,类型为NVARCHAR,长度为10
@YearMonthDate NVARCHAR(10) --需要统计的月份
--指定过程要执行的t_sql操作。
AS
--定义一个局部变量 @sql,类型为NVARCHAR ,长度为4000
DECLARE @sql NVARCHAR(4000)
--具体遵从行为请网上搜索 
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
--你这个存储过程都没任何意义!
其他:关于  set ANSI_NULLS ON
当 SET ANSI_NULLS 为 ON 时,如果比较中有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。这是因为未知值不能与其他任何值进行逻辑比较。这种情况发生在一个表达式与 NULL 单词进行比较,或者两个表达式相比,而其中一个表达式取值为 NULL 时。


关于 set QUOTED_IDENTIFIER ON
当 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 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列的索引视图和索引所必需的 SET 选项设置的详细信息,请参阅 SET (Transact-SQL) 中的“使用 SET 语句时的注意事项”。

在进行连接时,SQL Server Native Client ODBC 驱动程序和 SQL Server Native Client OLE DB Provider for SQL Server 自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 默认设置为 OFF。

创建表时,即使此时将 QUOTED IDENTIFIER 选项设置为 OFF,该选项在表的元数据中仍始终存储为 ON。

创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,并用于该存储过程的后续调用。

在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。

当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET QUOTED_IDENTIFIER。

SET QUOTED_IDENTIFIER 还与 ALTER DATABASE 的 QUOTED_IDENTIFER 设置相对应。有关数据库设置的详细信息,请参阅 ALTER DATABASE (Transact-SQL) 和设置数据库选项。

SET QUOTED_IDENTIFIER 是在分析时进行设置的。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并且 SET 语句在任何语句执行之前生效。


关于 ALTER PROCEDURE [dbo].[sp_XXXX] (这句不明白)
这个是   修改 存储过程  [dbo].[sp_XXXX] 

DECLARE @sql NVARCHAR(4000)  
这个是定义一个变量 名称为 @sal  数据类型为   NVARCHAR(4000) ALTER PROCEDURE [dbo].[sp_XXXX] (这句不明白)
修改过程sp_XXXX
DECLARE @sql NVARCHAR(4000)  
申明变量吧? 1。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。
2。当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
3.ALTER PROCEDURE [dbo].[sp_XXXX] :修改存储过程。(已存在同名数据库时用。)
4.DECLARE @sql NVARCHAR(4000): 声明变量。 

上一个:sqlserver版本问题
下一个:MSSQLSERVER 怎么启动不了。。。

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,