0
alter PROC   [dbo].[Ins_Users] 
@UserID int , 
@UserName nvarchar (max) , 
@Password nvarchar (max) , 
@Name nvarchar (100) , 
@Family nchar (10) , 
@LastLoginDate datetime
AS
BEGIN
-----------------------------------------
DECLARE @Passphrase nvarchar(128);
declare @newPass nvarchar(max);
declare @temp varbinary(max);
SET @Passphrase
    = 'hadi';
SET @temp= EncryptByPassPhrase(@Passphrase,@Password);
set @newPass=CONVERT(nvarchar(max),@temp);
-----------------------------------------
    INSERT INTO [dbo].[Users] 
        ( 
        [UserID], 
        [UserName], 
        [Password], 
        [Name], 
        [Family], 
        [LastLoginDate] 
        ) 
        VALUES 
        ( 
        @UserID, 
        @UserName, 
        @newPass, 
        @Name, 
        @Family, 
        @LastLoginDate 
        ) 
END

dbに保存する前にパスを暗号化したい。結果として varbinary を返す SQL で EncryptByPassPhrase 関数を使用しますが、パス列には nvarchar 型があるため、set @newPass=CONVERT(nvarchar(max),@temp); によって結果を nvarchar に変換します。トレースすると、暗号化の結果は true ですが、Convert の結果は空です。

4

1 に答える 1

0

上記の私のコメントに加えて、値http://sqlblog.com/blogs/peter_larsson/archive/2010/01/27/convert-binary-value-to-string-value.aspxを変換するためのハックを参照してください。私は、varbinary 列を使用し、変換をそのままにしておく方がはるかに優れていると言います。

于 2012-06-28T07:51:20.100 に答える