Con*_*neK 3 sql-server documentation type-conversion sql-server-2012
我刚刚发现在 SQL Server 2012 MSDN 文档中关于 binary 和 varbinary 类型,他们在文章末尾提到了以下内容:
不保证任何数据类型和二进制数据类型之间的转换在 SQL Server 版本之间是相同的。
我注意到这在 2005、2008 和 2008 R2 的文章的先前版本中不存在。我在网上四处搜索,但没有找到任何确切的解释来满足我“为什么?”的问题。(这是我在这里的问题。)
我正在做的项目需要将数据存储为varbinary(max),但是根据这个小说明,如果我需要移动二进制数据,然后在另一个SQL Server版本上将其转换,它将与原始数据不匹配数据转换为二进制,所以更深入地回答这个问题会很有帮助。
谢谢!
Microsoft 保留更改内置数据类型(如DATETIME. 所以如果你做一个
INSERT dbo.table(binaryColumn)VALUES(CAST(GETDATE() AS VARBINARY(8)));
Run Code Online (Sandbox Code Playgroud)
然后升级 SQL Server 甚至执行 SP 应用
SELECT CAST(binaryColumn AS DATETIME) FROM dbo.table;
Run Code Online (Sandbox Code Playgroud)
可能会为您提供与最初存储的日期不同的日期。
但是,如果您存储自己在 SQL Server 之外生成的二进制数据(例如 pdf 文件),则该数据不会受到此类更改的影响。
顺便说一下,这并不新鲜。微软总是说他们可能随时改变二进制表示。他们可能只是在新的 BOL 版本中让它更加明显。
尽管如此,微软仍然不太可能改变整数的二进制表示。但是,作为 CLR 类型实现的地理空间之类的东西很可能会在版本之间发生变化。
根据 Paul 的评论:SQL Server 确实保证您可以在同一语句中将内置数据类型转换为二进制并返回。在 tempdb 中存储中间值时将其扩展到同一个会话,但是我已经认为有风险 - 一个非常小的风险,但是一个风险。将中间值存储在一个真实的表中以在以后取回它是一个明确的禁忌。