【发布时间】:2019-10-23 08:07:29
【问题描述】:
我有一个 ASP.NET 页面,并且有一个表格看起来像
Create table Test(id int, Users Varchar(MAX));
Insert into Test select 1, 'admin;operator;user1';
Insert into Test select 2, 'superadmin';
Insert into Test select 3, 'superadmin;admin';
任何测试行都可以包含多个用户,因此我将它们用分号分隔。我想在客户端在文本框中搜索时返回值,他们只会插入:admin 我只想返回包含 admin 的行。
我不能用
select id,Users where Users like '%admin%'
因为在这种情况下,查询将返回包含超级管理员的第二列和第三列。
我怎样才能得到真实的结果?
【问题讨论】:
-
问题是您存储的是分隔数据。修正你的设计,你就没有这个问题了。
-
在您的操作中需要分隔
;? -
正如@Larnu 提到的,如果可能的话,改变设计,否则我看到的唯一选择是创建一个函数或存储过程,它将搜索字符串作为输入,首先拆分结果并将其存储在临时表(表变量)和文件过滤器并从那里返回结果
-
修复您的架构。那里没有第二和第三列,只有一列。即使拆分值,您也无法轻松查询这样存储的文本。您也无法加速此类查询,因为您无法索引各个值
-
感谢您的善意建议。但现在,我不能改变桌子的设计。因为这是一个令牌表并且有更多的列。一个令牌可以分配多个用户,所以在这种情况下,我必须分别为每个用户创建相同的令牌。
标签: sql asp.net sql-server