2012-07-28 104 views
0

所以,我有以下几点:以T-SQL查询到另一个查询,并找到匹配

SELECT 
    data, 
    encrypteddata, 
    CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata' 
FROM table 

鉴于它输出的原始数据列,加密数据列和解密数据列的temp栏的关键。都好。

我一直在试着做的就是得到那个结果,然后再做一个AS列,并且如果它匹配或者不匹配,就说Match有true或者false。

我已经试过

SELECT 
    data, 
    encrypteddata, 
    CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata' 
    COUNT(distinct(decrypteddata)) 
FROM table 
WHERE COUNT (distinct(decrypteddata)) > 1 
GROUP BY data 

这只是给了我一个错误在第一COUNT有关语法。

有没有人有建议我该怎么做?

+0

只需要计数encrypteddata字段就足够了吗?这将简化查询一点,它似乎会给出相同的结果,假设DecryptByKey函数是确定性的。 – 2012-07-28 05:56:12

+0

你在第二个查询中的'AS'decrypteddata'后面缺少一个'',这就是为什么你会得到一个语法错误。 – 2012-07-28 08:33:57

+0

转换/转换值时,应始终使用长度。所以使用类似varchar(255)的东西,确保你的转换成功。 – 2012-07-28 13:10:26

回答

0

试试这个

SELECT 
data, 
encrypteddata, 
CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata', 
COUNT(distinct(decrypteddata)) 
FROM table 
WHERE COUNT (distinct(decrypteddata)) >1 group by data 

- 在这里你已经使用了convert函数 - 在这里你已经使用了只有varchar没有长度paramet因此,如果您的实际数据超过30个字符,则只需要30个字符,剩余部分将被截断。因此,只要确定实际数据的长度是多少。

0

我看你在这行的末尾缺少一个冒号

CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata' 

而且,我不完全得到什么是你想匹配,但是考虑使用IF为

SELECT 
IF(CONVERT(varchar, DecryptByKey(encrypteddata))=other_data_field, 'true','false') as Match 
....