我想知道与通过 SQL Server 2008 运行托管代码相关的性能问题。我听说过一些内存和速度问题。
具体来说,我想实现一个 SHA256 散列 DLL 并使用 SQL Server 2008 将其作为存储过程执行。
或者,我可以简单地从我的 .Net 应用程序执行散列,然后将字符串传递给我的存储过程。
优点缺点?
谢谢。
我想知道与通过 SQL Server 2008 运行托管代码相关的性能问题。我听说过一些内存和速度问题。
具体来说,我想实现一个 SHA256 散列 DLL 并使用 SQL Server 2008 将其作为存储过程执行。
或者,我可以简单地从我的 .Net 应用程序执行散列,然后将字符串传递给我的存储过程。
优点缺点?
谢谢。
SQLCLR 相当快。如果您明确需要在 T-SQL 中执行 CLR 代码,请使用它。例如,假设您编写了一个带有签名的 SQLCLR 函数:
SqlString Hash(SqlString input)
并且您设法让它以应有的方式运行。您可以执行以下查询:
IF EXISTS(SELECT * FROM Users WHERE HashedPassword = dbo.Hash(@userPassword) AND UserName = @userName)
BEGIN
SELECT 'You''re alright, Jack.';
END
ELSE
BEGIN
SELECT 'Bogus.';
END
如果您可以设法在应用程序中对假设的密码字段进行哈希处理,则最好在应用程序中执行此操作并将哈希值传递到 SQL Server 以运行如下查询:
SELECT *
FROM User
WHERE UserName = @userName AND HashedPassword = @hashedPassword
这更好有几个原因: