sql - 存储过程参数“NULL”或“= NULL”
问题描述
有什么区别:
CREATE PROCEDURE [dbo].[MyProcedure]
@MyArgument INT NULL
和
CREATE PROCEDURE [dbo].[MyProcedure]
@MyArgument INT = NULL
我使用了第一个,它在 SQL Server 2016 中运行良好。但 SQL Server 2012 不接受它。两者都适用于 SQL Server 2016,我现在使用第二个没有问题。但是知道其中的区别会很有趣。
谢谢!
解决方案
他们不做同样的事情。第二个为调用者未指定一个的情况定义一个默认值。第一个没有。
“本机编译存储过程的 Transact-SQL 语法”语法允许将参数数据类型声明为允许NULL
或NOT NULL
。这是为 Hekaton(内存优化表)引入的。
虽然它没有被记录为“存储过程的 Transact-SQL 语法”中的语法支持,但它看起来允许NULL
但拒绝NOT NULL
并引发错误。
参数“@MyArgument”已声明为 NOT NULL。NOT NULL 参数仅支持本机编译的模块,内联表值函数除外。
明确指定没有任何价值NULL
- 这是默认且唯一的选项。常规存储过程没有声明性语法来指示参数必须是NOT NULL
.
推荐阅读
- c# - C#“无法将类型的对象转换为另一种类型。抛出异常
- javascript - React setState 有一个字符延迟
- batch-file - Goto 在批处理脚本中无法正常工作
- netsuite - 如何在 SuiteScript 2.0 Suitelet 表单中添加字段帮助?
- javascript - 比较一个数组和一个对象数组,并根据指定的值将内容压入新数组
- javascript - puppeteer 的 document.styleSheets
- java - Java DateTimeFormatter 未按预期解析
- artifactory - 如何在下载工件之前检查来自用户插件的构建信息?
- mysql - 更新主键索引行的时间很慢
- save - 为什么我的 Discord 资产在上传后没有保存?