Sql 如何用特定值更新varbinary字段?
基本上,我试图给一个用户一个特定的密码,这样我就可以在一个系统上测试一些功能,因为我只有我们的管理员帐户,我不能玩,我只是随机选择一个帐户,这样我就可以做我的测试。下面是我的更新尝试:Sql 如何用特定值更新varbinary字段?,sql,sql-server-2008,sql-server-2008-r2,sql-update,varbinary,Sql,Sql Server 2008,Sql Server 2008 R2,Sql Update,Varbinary,基本上,我试图给一个用户一个特定的密码,这样我就可以在一个系统上测试一些功能,因为我只有我们的管理员帐户,我不能玩,我只是随机选择一个帐户,这样我就可以做我的测试。下面是我的更新尝试: UPDATE dbo.Login SET Salt=CAST('bPftidzyAQik' AS VARBINARY), Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FF
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
创建函数转换器
(
@值为varbinary(最大值)
)返回VARCHAR(MAX)作为开始
将@result声明为varbinary(max),
@结果2为varchar(最大值),
@idx为bigint;
如果@value为空
返回null;
选择@result=@value;
选择@result2='';
选择@idx=1;
而子字符串(@result,@idx,1)!=0和@idx
不过,我不知道这对您有多大帮助,因为很可能使用这些字段的任何应用程序处理的值都与此函数预期的不同。对于记录,此函数接受一个最初为utf-8字符串的varbinary值,并返回该字符串的varchar值。祝你好运 由于您正在使用2008,请尝试以下操作:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=CONVERT(VARBINARY(MAX), '0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B', 1)
WHERE LoginID=10947
()Wait-为什么同时用mysql和sql server标记这个?是哪一个?抱歉,我现在已经修复了标签不幸的是仍然是一样的,字符串已更改,因此我无法获取该字段中的已知密码。谢谢你,杰克,这是我的头!现在所有问题都解决了,只需删除密码上的引号即可:(