我正在构建一个c#应用程序,它需要使用SQL Server数据库中的二进制(16)唯一标识符。目前,应用程序将它们存储为字符串。
我希望能够将唯一的id作为字符串传递给varchar参数,并在sql语句中进行转换,但我得到了一些奇怪的结果。
CONVERT(binary(16), '0x6EC5CAE61DF38840B8EFEC2D5A158B3A', 1)
--desired: 0x6EC5CAE61DF38840B8EFEC2D5A158B3A
--actual: 0x307836454335434145363144463338383430423845464543324435413135有什么方法可以这样转换吗?这是我在许多地方找到的解决方案,但我一直未能使其发挥作用。我还尝试了其他一些建议:
CONVERT(binary(16), '0x6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3])
CONVERT(varbinary(16), '0x6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3])
CONVERT(binary(16), '6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3])
CONVERT(varbinary(16), '6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3])
CAST('' AS XML).value('sql:variable("@Variable")', 'binary(16)')无济于事。
我可以在我的应用程序中以不同的方式存储这些数据,但我不确定要使用哪种数据类型?据我所知,在c#中没有二进制等价物?
提前谢谢。
发布于 2015-04-02 02:16:47
我不能让唯一标识符的例子工作,但一个同事指出的这个解决方案似乎是有效的。
DECLARE @id varchar(max)
DECLARE @idNew binary(16)
SET @id = '0x6EC5CAE61DF38840B8EFEC2D5A158B3A'
SET @idNew = cast('' as xml).value('xs:hexBinary(substring(sql:variable("@id"), 3) )', 'varbinary(max)')
select @idNew我完全理解xQuery是如何工作的,但这似乎可以正确地转换它。
这样,我就可以将c#字符串传递给@id变量,进行转换,并在sql语句中使用@idNew。
编辑:
信用/更多信息:
发布于 2015-04-02 02:52:13
如果这是一个SQL唯一标识符,那么C#的等价物就是一个GUID。
https://stackoverflow.com/questions/29397375
复制相似问题