Thr*_*gic 10 sql t-sql sql-server sql-server-2008-r2
在SQL Server中经常使用位来表示true和false,但是您不能逐字地为它们分配true和false,它必须是1或0.
我最近偶然发现了以下代码:
CREATE PROCEDURE TestProcedure
@parameter bit = false
AS
BEGIN
...
END
Run Code Online (Sandbox Code Playgroud)
为什么有效?特别是当在存储过程的主体中将位设置为false时不是.
如果使用select查询参数,则确实将其设置为0,表示false.
Tan*_*ner 15
SQL Server有内置的功能为字符串值转换'true'到1和'false'到0:
运行此代码并查看:
DECLARE @someval BIT = 'true'
SELECT @someval
SET @someval = 'false'
SELECT @someval
Run Code Online (Sandbox Code Playgroud)
参考:
字符串值TRUE和FALSE可以转换为位值:TRUE转换为1,FALSE转换为0.
正如@hvd在注释中所述,声明在样本中没有引号的情况下工作的原因是基于引用在存储过程声明的参数赋值中是可选的.
参考:
在存储过程定义中,可以为参数分配一个默认字符串值,即"未加引号"字符串.
...这是非常广泛使用的遗留行为,出于兼容性原因需要维护.在exec语句中传递参数时可以看到相同的行为.