查看 SQL Server 的各种安装,有时返回的第 4 列xp_msver
有时会是nvarchar
,有时会是varchar
。这似乎与 SQL Server 的版本无关,因为我看到 SQL Server 2000 到 2012 年的一些副本返回 varchar,而其他返回 nvarchar。这似乎也与 Windows 版本或位数无关。
为什么会这样?有没有办法配置输出或事先知道将使用什么数据类型?
编辑:我正在使用 Visual FoxPro 来查询此信息,其中有许多处理 unicode 的问题。所以,我需要知道如何处理数据并将其转换为 ANSI/单字节编码——如果还没有的话。我了解 ANSI/单字节的限制,但这里认为数据丢失是可以接受的。
sqlexec(connhandle, "exec xp_msver")
如果 ADO 在图片中,我只会使用RecordSets中继承的数据类型属性,但我仅限于 FoxPro 和它自己的游标功能。当被拉入 FoxPro 时,该Character_Value
列 - 这里有问题的第 4 列 - 被认为是MEMO数据类型,这是一种表示可能超过 255 个字符的字符串(某种甚至二进制数据)的奇特方式。对于长字符串和 FoxPro 无法处理的任何数据类型,它确实是一个包罗万象的方法,这在这种情况下是非常无用的。
有一篇Microsoft 知识库文章明确使用xp_msver
FoxPro 并指出 SQL Server 7.0 和更高版本始终为存储过程返回 Unicode,但情况并非总是如此。另外,因为xp_msver
它是一个存储过程sp_help
,sp_columns
在这里没有任何用处。
老实说,我更喜欢使用SERVERPROPERTY()
,但 SQL Server 7.0 不支持它,这是一个要求。我不希望通过对不同版本的 SQL Server 进行不同的查询来使代码过于复杂。此外,使用@@version
也不是一个好的选择,因为它需要解析文本,容易出现错误,并且不能提供我需要的所有信息。