You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重置密码执行SQL时出现字符串转uniqueidentifier转换失败报错

报错根因

触发这个转换错误的核心原因是:Password表的userid字段数据类型为uniqueidentifier(SQL Server的全局唯一标识符/GUID类型),你在WHERE条件中传入的筛选值'admin'是普通用户名字符串,不符合GUID的固定格式要求,SQL Server做隐式类型转换时直接失败。
uniqueidentifier类型只接受格式合法的36位GUID值(例:'A47239BE-1D5C-4F8A-92C7-3F9D27A1E0B4'),无法把'admin'这类普通字符串解析为对应类型,所以抛出转换错误。

解决方法
  • 先确认字段类型,执行以下语句验证表结构:
SELECT COLUMN_NAME, DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'dbo' 
  AND TABLE_NAME = 'Password' 
  AND COLUMN_NAME = 'userid'
  • 不要直接用userid = 'admin'做筛选:admin是登录用户名,不是GUID类型的用户ID,你需要关联存储用户基础信息的用户表,通过用户名匹配到对应的GUID用户ID后再执行更新。假设存储用户名的表为dbo.Users,两表通过userid字段关联,用户名字段为username,正确的更新语句如下:
UPDATE p
SET 
  p.salt = 'zfkI0NkJiIJR8Rubuuf800cxjp7epM7EjYkQIfzUxI=',
  p.hash = '96u76IApmLmLzatzGnvFzPq2h4noZZCpc+GATM2VUxk='
FROM [Servicename].[dbo].[Password] p
INNER JOIN [Servicename].[dbo].[Users] u 
  ON p.userid = u.userid
WHERE u.username = 'admin'
  • 如果要直接指定userid更新,必须先查到admin账号对应的合法GUID值,把WHERE条件替换为WHERE userid = '你查到的实际GUID值'即可。

注意:不要为了跑通语句强行修改userid字段的数据类型,绝大多数业务系统的账号关联逻辑都依赖GUID类型的用户ID,修改字段类型会导致全平台账号权限、关联数据全部失效。

内容的提问来源于stack exchange,提问作者Jared Ignacio Alonzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:48:16