我有一个包含多个外键的字段,我需要搜索给定的值。
说admin_ids :: 24,56,78
如何搜索该字段并获得以下结果:
24 = true; 6 = false; 7 = false
我无法更改架构。
有什么想法吗?
答案 0 :(得分:0)
我过去所做的是创建一个表值函数,将字符串拆分为不同的值,前提是它们由相同的...分隔符分隔。
这是一个示例,转换为脚本:
DECLARE
@Data NVARCHAR(MAX) = '24,56,78',
@Delimeter NVARCHAR(MAX) = ','
DECLARE @Values TABLE (ID INT IDENTITY(1,1), Data NVARCHAR(MAX))
DECLARE @Users TABLE (ID INT)
INSERT INTO @Users (ID)
VALUES (1),(6),(7),(24),(30),(56)
DECLARE @Iterator INT
SET @Iterator = 1
DECLARE @FoundIndex INT
SET @FoundIndex = CHARINDEX(@Delimeter,@Data)
WHILE (@FoundIndex>0)
BEGIN
INSERT INTO @Values (data)
SELECT
Data = LTRIM(RTRIM(SUBSTRING(@Data, 1, @FoundIndex - 1)))
SET @Data = SUBSTRING(@Data,
@FoundIndex + DATALENGTH(@Delimeter) / 2,
LEN(@Data))
SET @Iterator = @Iterator + 1
SET @FoundIndex = CHARINDEX(@Delimeter, @Data)
END
INSERT INTO @Values (Data)
SELECT Data = LTRIM(RTRIM(@Data))
SELECT
usr.ID,
CASE ISNULL(val.Data, -1)
WHEN -1 THEN 'False'
ELSE 'True'
END
FROM @Users usr
LEFT JOIN @Values val ON val.Data = usr.ID
希望这足以让你开始,如果TVF是你想去的方式:)
P.S。有很多方法可以做到这一点,我确信有些方法比提供的方法更好..这个工作,如果字段只有varchar(255),那么效率应该没问题。