복붙노트

[SQL] 테이블이 몇 가지 고유 한 열이 있는지 여부를 알아내는 방법

SQL

테이블이 몇 가지 고유 한 열이 있는지 여부를 알아내는 방법

나는 MS SQL 서버를 사용합니다.

나는 그들에 아무런 제약없이 키없이 아무것도 일부 대형 테이블을 건네 왔습니다.

나는 일부 열이 고유 한 값을 알고있다. 고유 한 값을 가지고있는 COLS을 finde하기 위해 주어진 테이블에 대한 현명한 방법이 있나요?

테이블에 행이 많은 DISTINCT 값으로 존재하는 경우 지금은 계산에 의해 각 열에 대해 수동으로 할.

SELECT COUNT(DISTINCT col) FROM table

모든 컬럼을 통해 루프 커서를 만들하지만 누군가가 똑똑 또는 기능 구축에 알고 있다면 듣고 싶은 prob는 없습니다.

감사.

해결법

  1. ==============================

    1.여기에 JNK의 @ 대신이 열은 아닌지 고유 한 값으로 구성되어 있는지 여부를 알려줍니다 모든 열에 대한 준비가 답을 반환 카운트를 인쇄 기본적으로 유사한 접근 방법이다 :

    여기에 JNK의 @ 대신이 열은 아닌지 고유 한 값으로 구성되어 있는지 여부를 알려줍니다 모든 열에 대한 준비가 답을 반환 카운트를 인쇄 기본적으로 유사한 접근 방법이다 :

    DECLARE @table varchar(100), @sql varchar(max);
    SET @table = 'some table name';
    
    SELECT
      @sql = COALESCE(@sql + ', ', '') + ColumnExpression
    FROM (
      SELECT
        ColumnExpression =
          'CASE COUNT(DISTINCT ' + COLUMN_NAME + ') ' +
          'WHEN COUNT(*) THEN ''UNIQUE'' ' +
          'ELSE '''' ' +
          'END AS ' + COLUMN_NAME
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = @table
    ) s
    
    SET @sql = 'SELECT ' + @sql + ' FROM ' + @table;
    PRINT @sql;  /* in case you want to have a look at the resulting query */
    EXEC(@sql);
    

    그것은 단순히 모든 열에 대해 COUNT (*)와 COUNT (DISTINCT 열)를 비교한다. 중복이있는 경우 결과는 모든 열이 중복하지 않는 컬럼의 값 UNIQUE이 포함됩니다 단일 행, 빈 문자열 테이블 될 것입니다.

    그러나 위의 솔루션은 널 (null)을하지 않는 열이 제대로 작동합니다. 당신이 열에 대한 고유 제한 조건 / 인덱스를 만들 때 SQL 서버가 널 (null)을 무시하지 않음을 유의해야한다. 열이 하나의 NULL을 포함하고 다른 모든 값은 고유 경우에도 컬럼에 UNIQUE 제약 조건을 만들 수 있습니다 (당신은 그것을 가치와 널 (NULL)의 부재 모두 uniquness을 필요로하지만 기본 키를 만들 수 없습니다).

    따라서 당신은 당신이 다음과 같은 스크립트를 사용하여 얻을 수있는 내용의보다 철저한 분석을해야 할 수도 있습니다 :

    DECLARE @table varchar(100), @sql varchar(max);
    SET @table = 'some table name';
    
    SELECT
      @sql = COALESCE(@sql + ', ', '') + ColumnExpression
    FROM (
      SELECT
        ColumnExpression =
          'CASE COUNT(DISTINCT ' + COLUMN_NAME + ') ' +
          'WHEN COUNT(*) THEN ''UNIQUE'' ' +
          'WHEN COUNT(*) - 1 THEN ' +
            'CASE COUNT(DISTINCT ' + COLUMN_NAME + ') ' +
            'WHEN COUNT(' + COLUMN_NAME + ') THEN ''UNIQUE WITH SINGLE NULL'' ' +
            'ELSE '''' ' +
            'END ' +
          'WHEN COUNT(' + COLUMN_NAME + ') THEN ''UNIQUE with NULLs'' ' +
          'ELSE '''' ' +
          'END AS ' + COLUMN_NAME
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = @table
    ) s
    
    SET @sql = 'SELECT ' + @sql + ' FROM ' + @table;
    PRINT @sql;  /* in case you still want to have a look at the resulting query */
    EXEC(@sql);
    

    COUNT (DISTINCT 열), COUNT (컬럼) 및 COUNT (*) : 용액이 세 값을 확인하여 계좌로 널이 걸린다. 그것은 이전 솔루션과 유사하게 결과를 표시하지만, 열에 대한 가능한 진단은 더 다양하다 :

  2. ==============================

    2.여기에 내가 아마 가장 깨끗한 방법으로 생각합니다. 그냥 당신에게 총 행 수 및 각 필드에 대한 고유 값의 수를 제공하는 쿼리를 작성하는 동적 SQL 및 단일 선택 문을 사용합니다.

    여기에 내가 아마 가장 깨끗한 방법으로 생각합니다. 그냥 당신에게 총 행 수 및 각 필드에 대한 고유 값의 수를 제공하는 쿼리를 작성하는 동적 SQL 및 단일 선택 문을 사용합니다.

    상단에있는 DB 이름과 TABLENAME 입력합니다. OBJECT_NAME은 현재 데이터베이스 컨텍스트에서 작동하기 때문에 DB 이름 부분은 정말 중요합니다.

    use DatabaseName
    
    DECLARE @Table varchar(100) = 'TableName'
    
    DECLARE @SQL Varchar(max)
    
    SET @SQL = 'SELECT COUNT(*) as ''Total'''
    
    SELECT @SQL = @SQL + ',COUNT(DISTINCT ' + name + ') as ''' + name + ''''
    FROM sys.columns c
    WHERE OBJECT_NAME(object_id) = @Table
    
    SET @SQL = @SQL + ' FROM ' + @Table
    
    exec @sql
    
  3. ==============================

    3.당신이 2008을 사용하는 경우, 각 테이블에 대해 후보 키를 반환하는 SSIS에서 데이터 프로파일 링 태스크를 사용할 수 있습니다.

    당신이 2008을 사용하는 경우, 각 테이블에 대해 후보 키를 반환하는 SSIS에서 데이터 프로파일 링 태스크를 사용할 수 있습니다.

    이 블로그 항목은 매우 간단합니다, 과정을 통해 단계 :

    http://consultingblogs.emc.com/jamiethomson/archive/2008/03/04/ssis-data-profiling-task-part-8-candidate-key.aspx

  4. ==============================

    4.내 코드가 무엇을 몇 마디 :

    내 코드가 무엇을 몇 마디 :

  5. ==============================

    5.코드의 간단한 라인에 대해 무엇 :

    코드의 간단한 라인에 대해 무엇 :

    CREATE UNIQUE INDEX index_name ON table_name (column_name);
    

    인덱스가 다음 생성되는 경우 COLUMN_NAME에만 고유 한 값을 가지고있다. 당신의 COLUMN_NAME에 속는가있는 경우, 오류 메시지가 표시됩니다.

  6. from https://stackoverflow.com/questions/6941049/how-to-find-out-whether-a-table-has-some-unique-columns by cc-by-sa and MIT license