2011-10-22 71 views
1

我试图在MD5 Base64中生成特定字符串的散列值。 是否可以在SQL Server中的查询中执行此操作?使用SQL Server中的查询在Base64中散列MD5

我知道在HashBytes(Algo,String)中有一个生成哈希的函数,但是没有Base64选项。

有吗?

谢谢!

回答

4
CREATE FUNCTION dbo.Base64Encode 
(
    @bin VARBINARY(MAX) 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    return CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'VARCHAR(MAX)') 
END 

SELECT dbo.Base64Encode(HashBytes('MD5', ItemName)) 
FROM tblItems 
+0

嗨马格努斯,它的工作原理!谢谢! 2个问题,因为我不熟悉MSSQL: 1)我只需要运行这个创建函数查询一次,以便该函数将存在于MSSQL数据库内。但是,我如何从MSSQL Management Studio中找到函数呢? 2)在同一个MSSQL Management Studio中,我使用的所有选择语句都必须是这样的: 从中选择列。

... 我该如何指定table.column ..或者缩短字段? 谢谢! :) – DarenTay

+0

是的,你只需要创建一次,你可以在Management Studio的'Programmability - > Functions - > Scalar-Values Functions'下找到它。如果批量以“使用DbName”开头,则不必在查询中指定它。 – Magnus

+0

嗨马格努斯,我注意到功能出现在'大师'。 1)如何创建一个显示在我正在使用的特定数据库中的函数? 2)如果函数在主数据库中,是否还有其他优点/缺点? 3)即使使用“使用DBname”,我仍然需要指定

在查询的'from'部分下。这是预期的吗? 对不起,我是新来的,所以我必须是一个真正的盲鼠标......但我似乎无法找到我能接受的答案承认 – DarenTay