2012-07-28 101 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 
....