sqlserver 存储过程 菜鸟求助 非技术性问题很简单
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) 这句申明变量吧??
当 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) 参考技术A --指定在对空值使用等于 (=) 和不等于 (<>) 比较运算符时,这些运算符的 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
--你这个存储过程都没任何意义!本回答被提问者采纳 参考技术B 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): 声明变量。 参考技术C ALTER PROCEDURE [dbo].[sp_XXXX] (这句不明白)
修改过程sp_XXXX
DECLARE @sql NVARCHAR(4000)
申明变量吧?
以上是关于sqlserver 存储过程 菜鸟求助 非技术性问题很简单的主要内容,如果未能解决你的问题,请参考以下文章
答:SQLServer DBA 三十问之一: charvarcharnvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使
SQLserver利用存储过程新加一行,id设为自动增长,结果运行后没有显示结果,ID增长了,其他信息没有存进