我需要将字符串转换为varbinary(85),这是我的SQL Server表中的数据类型(无法更改)。数据用于用户名,我需要将登录网站的人的Windows用户名与此SQL数据条目进行比较。我在数据库中登录的一个示例是:
0x0105000000000005150000004CCDD8292B55E7A8CD006C0E061F0012是数据类型varbinary(85)的数据。
现在我需要将它与字符串进行比较。将字符串转换为varbinary(85)的最佳方法是什么,这样我才能获得完全相同的值。
我最好在C#中完成所有操作,但我想我可以在SQL的数据库端完成。
解答:
使用sql我可以完美地生成名称。
SELECT SUSER_SID(string)
答案 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
运算符。