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
当 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填空题求助

菜鸟求助:c#三个窗体间传递数值

SQLserver利用存储过程新加一行,id设为自动增长,结果运行后没有显示结果,ID增长了,其他信息没有存进

SQL 非过程性语言 T-SQL PL/SQL 过程性语言;区别是啥?

sqlserver数据库存储过程返回值只能是integer类型吗? 不能返回字符串吗?