表名table1
,table2
。
table1
包含以下列:compno
,compname
table2
包含以下列:userno
,username
,accesscompno
表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
accesscompno
是nvarchar
数据类型。我有公司没有,用户现在没有检查用户是否有权访问该公司。
如何检查?
Sql server Ce
新手。
那么告诉如何解决这个问题
答案 0 :(得分:0)
永远不要在列中保存 逗号分隔值 !这违反了1NF
规范化的第一规则。请考虑改变数据结构。
创建一个 Junction 表,用于链接user
和company
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'