Sql server 从字符串值成功分配Int变量,无需显式转换
我很好奇SQL Server是如何成功地将整变量赋值为字符串的。我希望Sql server 从字符串值成功分配Int变量,无需显式转换,sql-server,tsql,Sql Server,Tsql,我很好奇SQL Server是如何成功地将整变量赋值为字符串的。我希望@Int的赋值会导致转换失败,但其工作原理与@Int的赋值相同 DECLARE @Int INT = CAST('2' AS INT) SELECT @Int DECLARE @Int1 INT = '2' SELECT @Int1 此外,如果将int变量指定给空字符串,则会导致变量的值为0 DECLARE @Int3 INT = '' SELECT @Int3 我搜索了一些关于这种行为的文档,但我能找到的只是关于如何使
@Int
的赋值会导致转换失败,但其工作原理与@Int
的赋值相同
DECLARE @Int INT = CAST('2' AS INT)
SELECT @Int
DECLARE @Int1 INT = '2'
SELECT @Int1
此外,如果将int变量指定给空字符串,则会导致变量的值为0
DECLARE @Int3 INT = ''
SELECT @Int3
我搜索了一些关于这种行为的文档,但我能找到的只是关于如何使用cast和convert函数的指南
是否有人对这种情况的发生方式/原因有很好的参考或解释?每当您尝试分配、组合或比较不同类型的值时,如果其中一个可以隐式转换为另一个,SQL Server都会隐式转换数据类型 这一点在以下文件中有很好的记录: 可以在以下场景中转换数据类型:
- 当一个对象的数据移动到另一个对象的数据、与另一个对象的数据进行比较或与另一个对象的数据进行组合时,可能必须将数据从一个对象的数据类型转换为另一个对象的数据类型
- 当Transact-SQL结果列、返回代码或输出参数中的数据移动到程序变量中时,必须将数据从SQL Server系统数据类型转换为该变量的数据类型。(与问题无关)
1+'2'
将产生3
,因为整数的优先级高于字符:
DECLARE @Int int = 1,
@Char char(1) = '2'
SELECT @int + @Char As ImplicitConversionDemo
结果:
ImplicitConversionDemo
3