将字符串转换为varbinary - 比较两者

时间:2014-06-19 20:19:37

标签: c# sql-server varbinary

我需要将字符串转换为varbinary(85),这是我的SQL Server表中的数据类型(无法更改)。数据用于用户名,我需要将登录网站的人的Windows用户名与此SQL数据条目进行比较。我在数据库中登录的一个示例是:

0x0105000000000005150000004CCDD8292B55E7A8CD006C0E061F0012是数据类型varbinary(85)的数据。

现在我需要将它与字符串进行比较。将字符串转换为varbinary(85)的最佳方法是什么,这样我才能获得完全相同的值。

我最好在C#中完成所有操作,但我想我可以在SQL的数据库端完成。

解答:

使用sql我可以完美地生成名称。

SELECT SUSER_SID(string)

1 个答案:

答案 0 :(得分:0)

1)我会在varbinary(85)列上创建一个[唯一]索引:

CREATE UNIQUE INDEX IUN_Users_UserName 
ON dbo.Users (UserName) -- Where UserName is varbinary(85)

2)我会使用相同的算法将当前用户名转换为varbinary(85)

DECLARE @binCurrentUserName VARBINARY(85);
SET @binCurrentUserName = .... convert here the current user name to VB(85) ...

我只会比较varbinary值:

SELECT u.UserID
FROM dbo.Users u
WHERE u.UserName = @binCurrentUserName -- Please remember that UserName's type is VB(85)

注意:将varbinary列从UserName列转换为字符串(nvarchar)这是一个坏主意,因为SQL查询将如下所示

SELECT u.UserID
FROM dbo.Users u
WHERE CONVERT(... u.UserName ... ) = @nvarcharCurrentUserName 

因为将在CONVERT列上应用的函数(例如UserName),这将阻止Index Seek =>此查询的执行计划将包含Index Scan运算符。