转换为uniqueidentifier数据类型为static?

时间:2016-07-11 16:28:41

标签: sql sql-server

我在SQL Server 2012中工作。我正在尝试"计算"用户名中的唯一编号,用于在查询中屏蔽其他用户名。我发现了 uniqueidentifier 数据类型,并想知道这是否对于每次查询运行都是静态的,即使在不同的机器上也是如此。

例如,如果我们的用户名为 xyz ,我会进行一些字符串操作,以便将用户名与其他用户区别开来,然后将其转换为 varbinary 0x78797A 。但是,这显然可以根据用户名的长度而变化。我不希望用户能够看到长 varbinary 集并假设(可能是正确的)它是用户名最长的人。

然后我将此 varbinary 转换为 uniqueidentifier 数据类型。在多次运行之后,看起来好像这个新值将保持静态,但我不确定这是否是因为我在同一台机器上运行它。无论何时运行或在哪里,我都需要它是静态的。在任何情况下, uniqueidentifier 都可能导致具有相同输入的不同值吗?

1 个答案:

答案 0 :(得分:1)

You can use the SQL Hash function. It will stay static when given the same input. MD2 is the name of the algorithm I am using in this example, but you can choose others.

MD2, MD4, MD5 any of these will be 16 characters

SHA, SHA1 either of these will be 20 characters

SHA2_256 will be 32 characters

SHA2_512 will be 64 characters

DECLARE @UserName VARCHAR(25) = 'xyz'
SELECT
     @UserName UserName
    ,HASHBYTES('MD2',@UserName) UserNameHash
    ,LEN(HASHBYTES('MD2',@UserName)) CharLength

MSDN Article on Hashbytes: https://msdn.microsoft.com/en-us/library/ms174415.aspx