我想知道,如果有一个技巧可以获得两个字符串比较的布尔/比特结果,那么如果常见字符之间的 TRUE 值将被返回存在两个字符串。
一个字符串是被授予访问权限的用户列表(即" OTV",存储在用户配置文件中),另一个是有权访问该对象的组列表(即" MDSKTUQ&# 34;,存储在记录中的DB中)。每个字符都是用户组的名称。
在实际SQL查询中,我想返回包含授予用户的任何组的行。类似的东西:
-- Following should display all files attached to record 145
-- to which has the user granted access:
SELECT FileCaption, FileName, FileType, Category FROM DocFiles
WHERE RecordID = 145 AND CONTAINS(GroupsRead, <<list_of_groups_string>>)
我有一个客户端解决方案,但可行的SQL端解决方案会更整洁,更安全。 评论和讨论表示赞赏。
此致
橡树
答案 0 :(得分:3)
你在这里 - 压力!
ALTER FUNCTION StringContainsCharactersFrom
(
-- Add the parameters for the function here
@source varchar(100),
@candidate varchar(100)
)
RETURNS bit
AS
BEGIN
declare @candidatePos int = 1;
while (@candidatePos <= len(@candidate))
BEGIN
declare @candidateLetter varchar = substring(@candidate, @candidatePos, 1);
if (CHARINDEX(@candidateLetter,@source, 1) > 0)
return 1;
set @candidatePos = @candidatePos + 1;
END
return 0;
END
GO