日期:2014-05-17  浏览次数:20451 次

关于report builder 传参后进行MD5运算无结果的问题
背景:
我做的一个报表需要权限数据控制,将将某两个个参数(类似于账号、密码)在SQL语句中进行MD5运算,以便和数据库中某个权限表进行比对,以便达到控制数据权限的目的
测试SQL如下(用于report builder):
DECLARE @jbr	int
SELECT 1 AS id  ,'10050001' AS workcode,'b59c67bf196a4758191e42f76670ceba' AS password INTO #HrmResource UNION
SELECT 2,'10050002','934b535800b1cba8f96a5d72f72f1611' UNION
SELECT 3,'10050003','2be9bd7a3434f7038ca27d1918de58bd'

SELECT @jbr=id FROM #HrmResource WHERE workcode=@workcode AND password=right(master.dbo.fn_varbintohexsubstring(1,HashBytes('MD5',@password),1,0),32) 

SELECT @jbr as jbr

输入账号:10050001,密码1111,查询结果为空。
但是如果我直接在SQL中给出参数变量,咋可以查出结果,这个是为什么呢?
DECLARE @workcode varchar(50)
DECLARE @password varchar(50)
SELECT  @workcode='10050001',@password='1111'

DECLARE @jbr int
SELECT 1 AS id  ,'10050001' AS workcode,'b59c67bf196a4758191e42f76670ceba' AS password INTO #HrmResource UNION
SELECT 2,'10050002','934b535800b1cba8f96a5d72f72f1611' UNION
SELECT 3,'10050003','2be9bd7a3434f7038ca27d1918de58bd'

SELECT @jbr=id FROM #HrmResource WHERE workcode=@workcode AND password=right(master.dbo.fn_varbintohexsubstring(1,HashBytes('MD5',@password),1,0),32) 

SELECT @jbr as jbr

------解决方案--------------------
你是输入账号:10050001,密码1111

但是你确保传输过程变量的值没有变化?
在查询前你可以先查看两个变量的值是什么?或者长度已经被载断