Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kann ich eine gespeicherte SQLCLR-Prozedur verwenden, um eine Spalte einer Datenbanktabelle zu aktualisieren (unter Verwendung einer kompilierten DLL)

Sie können Verwenden Sie SQLCLR, um die Verschlüsselung von C# aufzurufen, obwohl dies der falsche Ansatz ist. Wenn Sie einen benutzerdefinierten Algorithmus ausführen müssen, sollten Sie diesen in eine SQLCLR-Funktion kapseln, damit er in einer UPDATE-Anweisung oder sogar in einer INSERT- oder SELECT-Anweisung oder irgendwo verwendet werden kann. Etwas wie:

public class SP
{
  [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
  public static SqlString EncryptByAES(SqlString TextToEncrypt)
  {
     return DoSomething(TextToEncrypt.Value);
  }
}

Dann können Sie diese Funktion wie folgt verwenden:

UPDATE tb
SET    tb.FieldA = EncryptByAES(tb.FieldA)
FROM   dbo.TableName tb
WHERE  tb.FieldA some_test_to_determine_that_FieldA_is_not_alreay_encrypted;

ABER , bevor Sie einen benutzerdefinierten Verschlüsselungsalgorithmus schreiben, sollten Sie sich die verschiedenen integrierten gepaarten ENCRYPTBY / DECRYPTBY-Funktionen ansehen, die möglicherweise genau das tun, was Sie brauchen: