sql - 如何使用特定值更新 varbinary 字段?

标签 sql sql-server-2008 sql-server-2008-r2 sql-update varbinary

基本上,我试图给用户一个特定的密码,以便我可以在系统上测试某些功能,因为我只有我们的管理员帐户,我不能玩,我只是选择一个随机帐户,以便我可以进行测试。所以这是我的更新尝试:

UPDATE dbo.Login
SET
  Salt=CAST('bPftidzyAQik' AS VARBINARY),
  Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY)
WHERE LoginID=10947

它运行良好,但是数据库中的代码一个看起来像日语,另一个的语法看起来不错,但它不是我输入的值,我希望它使用我输入的确切值,以便我可以登录。如何我要这样做吗?我尝试了几种不同的转换和转换解决方案,但都没有运气。

最佳答案

尝试这个:

UPDATE dbo.Login
SET
  Salt=CAST('bPftidzyAQik' AS VARBINARY),
  Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B
WHERE LoginID=10947

(您不需要将存储十六进制值的字符串转换为 varbinary - 默认情况下就是这样,没有引号)

问题是,您如何生成该密码十六进制值,并且您是否使用与读取它相同的编码来生成它?如果您打算将该数据转换回字符串,则需要一些代码来执行此操作。这是我编写的一个函数:
CREATE FUNCTION ConvertBinary
(  
    @value AS varbinary(max)
) RETURNS VARCHAR(MAX) AS BEGIN  

    DECLARE @result AS varbinary(max),
            @result2 AS varchar(max),
            @idx AS bigint;

    IF @value IS null
        return null;

    SELECT @result = @value;  
    SELECT @result2 = '';
    SELECT @idx = 1;

    WHILE substring(@result, @idx, 1) != 0 AND @idx < len(@result)
        BEGIN
            SET @result2 = @result2 + cast(substring(@result,@idx,1) as char(1));  
            SET @idx = @idx + 1;
        END

    RETURN @result2;  

END 

不过,我不知道这对您有多大帮助,因为很可能使用这些字段的任何应用程序处理的值都与此函数预期的不同。作为记录,此函数采用原始 utf-8 字符串的 varbinary 值,并返回该字符串的 varchar 值。祝你好运!

关于sql - 如何使用特定值更新 varbinary 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567222/

相关文章:

sql-server - SQL Server 存储过程中的 CASE 语句出现问题

php - 我的术语已被搜索,但我的 OR 语句没有收到任何结果

mysql - 使用 C 将客户端输入插入 MySQL 数据库

sql - Red Query Builder生成哪种类型的SQL?

sql - 什么更好 : to have many similar databases or one database with similar tables or one database with one table?

php - 通过 PHP 连接到 SQL Server 2008

view - 如何在 SQL Server 2008 R2 Management Studio 中从 'View' 复制带有 header 的结果

sql - 更新表中的重复字段

sql - 比较未完全解密的加密银行帐户详细信息

java - SQL 连接与 DataSource 超时