gpt4 book ai didi

sql - 为什么在存储过程定义中将 SQL Server 位设置为 "false"有效?

转载 作者:行者123 更新时间:2023-12-01 12:30:33 25 4
gpt4 key购买 nike

位在 SQL Server 中经常用于表示真和假,但是您不能按字面意思为它们分配真和假,它必须是 1 或 0。

我最近偶然发现了以下代码:

CREATE PROCEDURE TestProcedure
@parameter bit = false
AS
BEGIN
...
END

为什么有效?尤其是在存储过程的主体中将位设置为 false 时不是。

如果您使用 select 查询参数,它确实设置为 0,表示 false。

最佳答案

SQL Server 具有转换字符串值的内置功能 'true'1'false'0 :
运行此代码并查看:

DECLARE @someval BIT = 'true'

SELECT @someval

SET @someval = 'false'

SELECT @someval
引用:
bit (Transact-SQL)

The string values TRUE and FALSE can be converted to bit values: TRUE is converted to 1 and FALSE is converted to 0.


正如@hvd 在评论中指出的那样,声明在您的示例中没有引号的原因是基于引号在存储过程声明的参数分配中是可选的。
引用:
Parameter Assignment to unquoted string

In a stored procedure definition, a parameter can be assigned a default string value that is an 'unquoted' string.

...this is very widely used legacy behavior that needs to be maintained for compatibility reasons. The same behavior can be seen when passing parameters in an exec statement.

关于sql - 为什么在存储过程定义中将 SQL Server 位设置为 "false"有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28430033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com