sql 数据记录属性值检测

Amina_L 2014-12-17 04:52:02
数据表为, NAME2 NAME3 NAME4 NAME5 都可能是一个用‘;’分隔开的字符串,查询分析记录
NAME1 NAME2 NAME3 NAME4 NAME5
A B,C C;D E;F G
B H I;J K;L M
H N O P Q
R K C;D G Q
检测出有问题的记录并标明哪种问题
1、 NAME1和NAME2属性值有交集的记录;

A B,C C;D E;F G
B H I;J K;L M
H N O P Q
2、 NAME3 、NAME4 、NAME5 的属性值包含在NAME2属性列的

A B,C C;D E;F G
B H I;J K;L M
R K C;D G Q
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2014-12-17
  • 打赏
  • 举报
回复

--DROP FUNCTION fn_CheckName2AndName3
CREATE FUNCTION fn_CheckName2AndName3
    (
     @s1 NVARCHAR(50)
    ,@s2 NVARCHAR(50)
    )
RETURNS BIT
    BEGIN
        IF EXISTS ( SELECT  1
                    FROM    ( SELECT    Check1 = CONVERT(XML, '<root><v>'
                                        + REPLACE(@s1 + ';' + @s2, ';',
                                                  '</v><v>') + '</v></root>')
                            ) AS a
                            CROSS APPLY ( SELECT    Col2 = C.v.value('.',
                                                              'nvarchar(100)')
                                          FROM      a.Check1.nodes('/root/v') C ( v )
                                        ) b
                    GROUP BY b.Col2
                    HAVING  COUNT(1) > 1 ) 
            RETURN 1
        RETURN 0
    END
GO
--问题1
SELECT * FROM TableA WHERE dbo.fn_CheckName2AndName3(NAME2,NAME3)=1
--问题2
SELECT * FROM TableA WHERE dbo.fn_CheckName2AndName3(NAME2,NAME3+';'+NAME4+';'+NAME5)=1
写一种 方法,自己检查,数据库新增栏位布尔值,维护CHECK,以上是方法,自己改,或自己分拆字符一段段去匹配这样性能高一些
中国风 2014-12-17
  • 打赏
  • 举报
回复
引用 3 楼 Amina_L 的回复:
如果用程序的话,C#好操作吗? [quote=引用 1 楼 roy_88 的回复:] 首先,这类最好在程序检查,处理后不需要经过DB 次之,在数据库可用存储过程接口新增记录时封装检查 没法时,在触发后也可用check或trigger处理
[/quote] 最好用程序实现,用正则处理,SQL SERVER没有正则函数,只能自定义函数或xml直接解析(不推荐性能较低)
Amina_L 2014-12-17
  • 打赏
  • 举报
回复
如果用程序的话,C#好操作吗?
引用 1 楼 roy_88 的回复:
首先,这类最好在程序检查,处理后不需要经过DB 次之,在数据库可用存储过程接口新增记录时封装检查 没法时,在触发后也可用check或trigger处理
Amina_L 2014-12-17
  • 打赏
  • 举报
回复
我不太明白1楼roy_88说的,我是刚刚接触数据不知道用何种方法合适,我如果想不用程序,只是利用数据库,然后输出这样的数据块儿呢?望大神指点
引用 1 楼 roy_88 的回复:
首先,这类最好在程序检查,处理后不需要经过DB 次之,在数据库可用存储过程接口新增记录时封装检查 没法时,在触发后也可用check或trigger处理
中国风 2014-12-17
  • 打赏
  • 举报
回复
首先,这类最好在程序检查,处理后不需要经过DB 次之,在数据库可用存储过程接口新增记录时封装检查 没法时,在触发后也可用check或trigger处理

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧