SQL在数据检查中的应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL在数据检查中的应用相关的知识,希望对你有一定的参考价值。

参考技术A

关于SQL在数据检查中的应用

  结构化查询语言SQL是工业标准数据库操作语言,在实践中得到了广泛运用,下面是我为大家搜索整理了关于SQL在数据检查中的应用,欢迎参考阅读,希望对大家有所帮助。想了解更多相关信息请持续关注我们应届毕业生培训网!

  矢量地形图是地图要素的数字化表示,主要由属性数据、拓扑数据和元数据三部分组成。属性数据用于描述地理实体的类别、等级等质量特征和数量特征,拓扑数据用于描述地图上点、线、面状要素之间关联、邻接、包含等空间关系,元数据则包含了数据和信息资源的描述性信息。境外判绘生成的矢量数据是按照地形图作业规范规定的标准格式;其数据的正确性、完备性、规范性的检查是十分重要的环节。若能对数据属性进行分类显示,即按照某一属性项(编码、名称、编号等)分类和排序,将有共同属性的地图目标排列在一起,将会给属性检查带来很大的便利。现有的检查软件都会进行属性项检查,但是这种检查方式比较单一,不能自己定义查找方式,且操作比较繁琐,所以需要寻找一种能对属性数据进行快速查询、分析的方法。

  一、属性数据文件记录格式

  属性数据文件由点记录、线记录、面记录三部分组成。点、线、面记录各部分都有一个类首记录和若干中间记录,以文本方式存储。

  作业中使用的式矢量地形图数据是严格按照生产记录格式组织、存储的,具有严谨规范的数据结构,很自然我们可以利用数据库来实现属性数据的查询分析。

  二、操作流程

  要实现这一设想,方法有很多,可以利用EXCEL、ACCESS导入分析,也可以编程直接读取属性数据文件。笔者采用的方法是将属性文件读入MDB数据库,利用SQL语言进行自定义查询,并输出结果的方式。流程图如下:

  按图幅建立的mdb数据库中为每个图层建立一个数据表,用于存储每层的.属性数据。数据表的结构(字段名称、数据类型、长度等)应按照军标格式设置,避免出现转换时数据丢失。利用自编程序将属性文件中的记录逐个读入数据库,在查询语句框中输入SQL语句即可进行数据筛选。通过分类筛选,将同类地物放在一起比较,就可以很轻松的检查出地物属性是否存在遗漏和错误。若需输出查询结果,程序可根据相应的坐标文件生成err文件,以供在freescan中检查修改。程序利用VB6.0+数据控件的方式实现,主界面如下:

  三、利用SQL实现属性数据查询分析

  结构化查询语言SQL是工业标准数据库操作语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,在实践中得到了广泛运用。它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使他具有极大的灵活性和强大的功能。

  SQL语言包含4个部分 数据定义语言(如CREATE、DROP、ALTER等语句)、数据操作语言(如INSERT、UPDATE、DELETE语句)、数据查询语言(如SELECT语句)、数据控制语言(如GRANT、REVOKE、COMMIT、ROLLBACK等语句)。我们最常用到的SQL包括选择列表、FROM子句和WHERE子句,它们分别说明所查询列、查询的表、以及搜索条件等。

  通过SQL语句的组合可以实现更多复杂的查询,实现对数据的分析与筛选。

  如进行独立房与街区名称指针的挂接SQL语句:

  SELECT * FROM 居民地C WHERE (居民地C.注记编号=Any (select 注记编号 from 居民地C where 居民地C.编码=130204)) and 注记编号<>0 and 编码=130201;

  这是查找街道名未挂指针的SQL语句:

  SELECT * FROM 注记R

  WHERE 注记R.编码=280338 and (注记R.注记号 NOT in (select 陆地交通D.注记编号 from 陆地交通D));

  通过修改SQL语句就可以非常灵活的实现各种查询和筛选。为了方便操作,还可以将各种条件的查询语句存放在一个文本文件中,随时调用。

  本文主要介绍了利用SQL语句在数据库中对矢量地形图属性数据进行分析检查的一种方法,这种方法在往年的数据入库中是可行的,且在一定程度上提高了作业效率。在当前进行境外数字判绘过程中,需要我们通过实践不断总结和探索新的更有效的作业方法,高质量、高效率圆满完成任务。

;

SQL Server 检查数据库视图中的所有列是不是有特定的字符串值

【中文标题】SQL Server 检查数据库视图中的所有列是不是有特定的字符串值【英文标题】:SQL Server to check all columns in a databases views for a specific string valueSQL Server 检查数据库视图中的所有列是否有特定的字符串值 【发布时间】:2019-01-17 18:31:45 【问题描述】:

我的雇主有一个第三方应用程序,其中包含一组非常复杂的斜命名视图。我正在尝试查找包含在应用程序 UI 中输入的特定数据的视图。

我有 SQL 来构建一个包含所有视图名称和列名称的 CTE...

我想不通的是如何在每个视图中测试每一列(可以保存一个字符串值)以获取特定的字符串值。

这是我所做的开始,它不起作用,但会说明我正在尝试做的事情。请注意,它还缺少对要根据可以保存字符串值的内容进行检查的列的约束。

下面的另一个明显问题是我想评估列的值而不是值的列名。

WITH ViewColumn_CTE (ViewName, ColumnName) AS
(
    SELECT TOP 100
        V.Name as ViewName, 
        C.Name as ColumnName
    FROM
        sys.views V 
    JOIN
        SysColumns C ON V.Object_ID = C.ID
)
SELECT TOP 1
    ViewName,
    ColumnName
FROM
    ViewColumn_CTE
WHERE
    ColumnName = 'Cash Equivalents'

【问题讨论】:

CTE 中的视图定义在哪里?大多数(如果不是全部)数据库系统在其系统表中的某处为您提供定义,但您必须阅读文档或咨询您的 DBA 这些名称是什么。还请edit您的帖子并添加您正在使用的 SQL Server 产品作为标签。 我编辑了标签以包含 SQL Server 2014。Sys.views 仅返回视图名称,我在那里看不到任何有用的定义信息。 SysColumns 似乎有数据类型信息,但它并没有跳出来。当我从中选择 * 时,我可以看到字段长度、可空性等。 这是个坏主意,因为 N 个视图可以引用一个实际存储数据的表。视图只是由查询定义的虚拟表。您应该关心的是数据存储在哪些 tables 中。从中可以找到 views 引用这些 tables 如果您真的关心.无论如何,搜索具有varchar 值的每个表(或视图)的每一行听起来很可怕。更好的是使用 SQL Profiler 或其他工具来跟踪用户输入数据时正在调用的查询。然后,你就会知道这些表了。 【参考方案1】:

我有一个这样的脚本在这里飞来飞去。您可以先使用它。

它从目录中获取感兴趣的列列表,对它们进行迭代并使用动态 SQL 查询它们。

DECLARE @searched_value nvarchar(MAX) = 'a'; -- set to the value you search for

SET NOCOUNT ON;

DECLARE @schema_name sysname;
DECLARE @table_name sysname;
DECLARE @column_name sysname;
DECLARE @sql nvarchar(MAX);
DECLARE @result TABLE ([schema_name] sysname,
                       [table_name] sysname,
                       [column_name] sysname,
                       [value] nvarchar(MAX));

DECLARE cursor_all_columns CURSOR
                           LOCAL
                           FAST_FORWARD
FOR
SELECT s.name,
       o.name,
       c.name
       FROM sys.schemas s
            INNER JOIN sys.all_objects o
                       ON o.schema_id = s.schema_id
            INNER JOIN sys.all_columns c
                       ON c.object_id = o.object_id
            INNER JOIN sys.types y
                       ON y.user_type_id = c.user_type_id
       WHERE o.type = 'U' -- set to 'V' for views
             AND lower(y.name) IN ('char',
                                   'nchar',
                                   'varchar',
                                   'nvarchar'); -- include more types if needed

OPEN cursor_all_columns;
FETCH NEXT FROM cursor_all_columns
           INTO @schema_name,
                @table_name,
                @column_name;
WHILE @@fetch_status = 0
BEGIN
  SET @sql =   N'SELECT ''' + quotename(@schema_name) + N''',' + nchar(13) + nchar(10)
             + N'       ''' + quotename(@table_name) + N''',' + nchar(13) + nchar(10)
             + N'       ''' + quotename(@column_name) + N''',' + nchar(13) + nchar(10)
             + N'       ' + quotename(@column_name) + N'' + nchar(13) + nchar(10)
             + N'       FROM ' + quotename(@schema_name) + N'.' + quotename(@table_name) + N'' + nchar(13) + nchar(10)
             + N'       WHERE lower(' + quotename(@column_name) + N') LIKE N''%' + lower(replace(replace(replace(@searched_value, '%', '!%'), '[', '!['), ']', '!]')) + N'%'' ESCAPE ''!'';' + nchar(13) + nchar(10);

  INSERT INTO @result
              EXEC sp_executesql @sql;

  FETCH NEXT FROM cursor_all_columns
             INTO @schema_name,
                  @table_name,
                  @column_name;
END;
CLOSE cursor_all_columns;
DEALLOCATE cursor_all_columns;

SELECT [schema_name],
       [table_name],
       [column_name],
       [value]
       FROM @result;

Is 适用于表格,但如果您将对象类型从 'U' 更改为 'V',它也适用于视图。 (尽管表格可能更有趣。)但不能保证。

在开头设置您搜索的值。

它搜索(n)(var)char 类型的任何列,如果它包含搜索的值,不区分大小写。如果您想要包含从字符串类型派生的任何自定义类型,则必须相应地对其进行调整。

输出是架构、表(或视图)名称、列名和匹配的值(如果多行包含该列中的搜索值,则该列可能会被多次列出)。

(免责声明:可能有改进或错误的空间。)

【讨论】:

以上是关于SQL在数据检查中的应用的主要内容,如果未能解决你的问题,请参考以下文章

检查日期是不是在 sql 中的日期范围之间(不检查年份)

在 SQL 和 VB.NET 中检查日期是不是小于另一个

检查列数据类型并仅对 Spark SQL 中的整数和小数执行 SQL

C#。当我尝试检查用户是不是存在于我的 SQL 数据库中时,我的 Windows 窗体应用程序崩溃

Android SQL:检查数据库中的记录是不是存在

PHP/SQL 登录表单 - 如何检查数据库中的密码