当你这样做的时候
SELECT @a
,您将向某个客户端(如SQL Server Management Studio)返回一个结果集,该客户端由一个类型的单列组成。
float
. 到那时为止
那个工具
把它转换成
浮动
变成一个
string
使用它认为在编程环境中合适的任何选项。
当你分配
@a
到
@b
,强制从
浮动
到
varchar(10)
.
SQL服务器
决定如何执行此转换,然后在第二个结果集中将该数据发送到客户机工具。客户机工具可能很少或根本不进行操作,因为在某种程度上,它已经是一个字符串。
所以你有两个不同的东西在运行转换。SQL Server管理工作室
一
将
通常
选择类似于SQL Server本身选择的转换,但它
决不保证
,正如您在这里用您的测试用例观察的那样。
一
被假定为提出此类问题的人通常的出发点。但对SQL小提琴同样有效。这个
@乙
转换为字符串由SQL Server控制。这个
@
转换是由某些代码执行的
在内部
SQL fiddle应用程序。这可能是语言/框架中内置的东西,也可能是一些自定义代码。没关系。关键区别在于
不同的
由不同的作者(可能)编写的代码,对特定转换的原因有不同的看法。
明智的
默认选项。