检查字符串是否包含在SQL Server CE中

时间:2015-12-12 12:07:05

标签: sql-server sql-server-ce

表名table1table2

  • table1包含以下列:compnocompname
  • table2包含以下列:usernousernameaccesscompno

表1:

compno compname
----------------
1        A
2        B
3        C

表2:

userno username accesscompno
-----------------------------
0        Admin      1,2,3
1        1          2,3
2        2           1,2  

accesscompnonvarchar数据类型。我有公司没有,用户现在没有检查用户是否有权访问该公司。

如何检查?

Sql server Ce新手。 那么告诉如何解决这个问题

1 个答案:

答案 0 :(得分:0)

永远不要在列中保存 逗号分隔值 !这违反了1NF规范化的第一规则。请考虑改变数据结构。

创建一个 Junction 表,用于链接usercompany

create table user_acccess
(
user_acccess_id int identity(1,1),
user_no int, -- foreign key mapped with user table
compno int -- foreign key mapped with company table
)

现在,您的需求只需要一个简单的select查询

select * 
from user_acccess 
where userno = 'some user'
  and compno = 'some company'

仍然想要使用当前的表结构,然后尝试这个

;with cte as
(
SELECT userno,
       username,
       Split.a.value('.', 'VARCHAR(100)') compno
FROM   (SELECT userno,
               username,
               Cast ('<M>' + Replace(accesscompno, ' ', '</M><M>') + '</M>' AS XML) AS Data
        FROM   [table2]) AS A
       CROSS APPLY Data.nodes ('/M') AS Split(a) 
)
select * 
from cte 
where userno = 'some user'
  and compno = 'some company'