码迷,mamicode.com
首页 > 其他好文 > 详细

多表和视图联合查询,实现MVM扫描任务详细SOC Case----去重,联合,stuff,触发器赋权

时间:2015-02-26 18:44:06      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:联合查询 多表 视图 触发器赋权 自连接 不同条目相同自动拼接

SELECT distinct([faultline].[MVMLive].[vwScan].[JobID])
      ,[faultline].[dbo].[Users].Name
      ,[faultline].[MVMLive].[vwScan].[ConfigurationName]
      ,[faultline].[MVMLive].[vwScan].[StartTime]
      ,[faultline].[MVMLive].[vwScan].[EndTime]
       ,STUFF((select ‘, ‘+(StartIPAddressIPv4+‘-‘+EndIPAddressIPv4) from [faultline].[MVMLive].[vwScannedIPRange]where JobID=5 for XML path(‘‘)),1,1,‘‘)
  FROM [faultline].[MVMLive].[vwScan]
  left join [faultline].[dbo].[Jobs]on [faultline].[dbo].[Jobs].JobID= [faultline].[MVMLive].[vwScan].JobID
  left join [faultline].[dbo].[Users]on [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID
  left join [faultline].[MVMLive].[vwScannedIPRange] on [faultline].[MVMLive].[vwScannedIPRange].JobID=[faultline].[MVMLive].[vwScan].[JobID]
  where [faultline].[MVMLive].[vwScan].JobID= 5 



 

以上语句涉及到的知识点:

1.distinct 查询结果去重功能。

2.联合查询left join, 联合条件不一定必须是主表的,如 [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID。即是说,1、2、3,不一定非得,1-2和1-3的方式联合,也可以是,1-2和2-3的联合。

3.视图和表的混用,[faultline].[MVMLive].[vwScannedIPRange]就是视图,实际使用中发现视图的执行需要额外的权限----相关的触发器的权限,Fslong2IP,

4.为特定的视图、表、触发器、存储过程赋权的语句 grant execute/select on Fslong2IP to arcsight

5.stuff 函数的使用,字符替换。



视图和触发器的概念和关系:


视图就是查询结果,这个结果也是以表的形式展示的。触发器是在执行增删改等表的操作时,额外需要执行的一些动作。猜测上边的Fslong2IP多半是一个将16进制存储的IP转换成字符串的函数,这个函数并不会显式执行,

只有当需要获得IP字符串的时候,才会被调用执行,这也是为什么arcsight账号没有权限执行,需要单独对這个触发器赋权的原因。



---------------------2015/2/10 14:14 进过多次修改和优化后的实现---------------------------------------


use faultline
go
create view jobdesIPrange as
SELECT JobID,
cast((select StartIPAddressIPv4 +‘-‘+EndIPAddressIPv4+ ‘,‘ from  [faultline].[MVMLive].[vwScannedIPRange] where JobID = A.jobid for XML PATH(‘‘)) as varchar(1000)) as iprange
from [faultline].[MVMLive].[vwScannedIPRange] A

group by jobid


cast--转换为字符串,而且指定了字符串的长度,否则默认只有30,查询结果缺失。

xml path(‘‘)实现不同条目的统一字段的按条件拼接。有用到一种技巧,自连接条件,JobID = A.jobid。




use faultline
go
create view forsoccase as
SELECT [faultline].[MVMLive].[vwScan].[JobID]
          ,[faultline].[dbo].[Users].Name as UserName
      ,[faultline].[MVMLive].[vwScan].[ConfigurationName] as TaskName
      ,[faultline].[MVMLive].[vwScan].[StartTime]
      ,[faultline].[MVMLive].[vwScan].[EndTime]
      ,[faultline].[dbo].engines.serveraddress as ScanSource
       ,[faultline].[dbo].jobdesIPrange.iprange as ScanDestination
  FROM [faultline].[MVMLive].[vwScan]
  left join [faultline].[dbo].[Jobs]on [faultline].[dbo].[Jobs].JobID= [faultline].[MVMLive].[vwScan].JobID
  left join [faultline].[dbo].[Users]on [faultline].[dbo].[Jobs].UserID=[faultline].[dbo].[Users].UserID
  left join [faultline].[dbo].jobdesIPrange on [faultline].[dbo].jobdesIPrange.JobID=[faultline].[MVMLive].[vwScan].[JobID]
  left join [faultline].[dbo].engines on [faultline].[MVMLive].[vwScan].[EngineName]=[faultline].[dbo].engines.name
  where [faultline].[MVMLive].[vwScan].JobID > 0




use faultline
go

grant execute on Fslong2IP to arcsight




-------------------2015/2/13 11:26 -----------------------


由于系统时间是UTC 0的形式存储于数据库中,显示的时间比正常时间少了8小时,修改对应字段。


      ,dateadd(hour,8,[faultline].[MVMLive].[vwScan].[StartTime]) StartTime
      ,dateadd (hour,8,[faultline].[MVMLive].[vwScan].[EndTime]) EndTime


本文出自 “奋斗的菜鸟” 博客,谢绝转载!

多表和视图联合查询,实现MVM扫描任务详细SOC Case----去重,联合,stuff,触发器赋权

标签:联合查询 多表 视图 触发器赋权 自连接 不同条目相同自动拼接

原文地址:http://mintank.blog.51cto.com/2544524/1615491

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!