提问人:Embargo96 提问时间:9/11/2023 更新时间:9/11/2023 访问量:33
在数据库中选择特定用户时,“传递给 RIGHT 函数的长度参数无效”
"Invalid length parameter passed to the RIGHT function" when selecting specific users in a DB
问:
我无法通过分析这里的其他用户来解决这个问题,他们有同样的问题。我正在尝试通过使用以下语句选择数据库中的一组特定用户来创建视图:
SELECT RIGHT([A_ACCOUNT], Charindex('\', Reverse([A_ACCOUNT])) - 1) AS
Account_UserKey,
Replace(Upper(Concat('APP_',R.A_DESCRIPTION)), ' ', '_') AS
Role_BusinessKey,
'False' AS
Disabled
FROM [db_application_company].[dbo].[ROLEASSIGN_P] RA
INNER JOIN dbo.LOGIN_M AS LO
ON RA.I_LOGIN_M = LO.I_LOGIN_M
INNER JOIN dbo.ROLES_M R
on R.I_ROLES_M = RA.I_ROLES_M
WHERE LO.A_ACCOUNT!='' and R.A_DESCRIPTION not in ('', 'READ ONLY')
由于错误消息是“Msg 536,Level 16,State 2,Line 1”并且基于其他用户的帖子,我认为问题来自“-1”,但我不确定如何解决它。
答:
2赞
Nandalal Seth
9/11/2023
#1
如果应用 CHARINDEX 的字符串中没有“\”,则它可能返回 0。然后你的 RIGHT 表达式将变为 ([Account],0-1) 并抛出错误。
你能试试这个吗?它将检查“\”是否存在,如果没有,则将返回原始字符串
case when Charindex('\',[A_ACCOUNT]) <= 0 then [A_ACCOUNT] else RIGHT([A_ACCOUNT], Charindex('\', Reverse([A_ACCOUNT])) - 1)
评论