[SQL] 테이블이 몇 가지 고유 한 열이 있는지 여부를 알아내는 방법
SQL테이블이 몇 가지 고유 한 열이 있는지 여부를 알아내는 방법
나는 MS SQL 서버를 사용합니다.
나는 그들에 아무런 제약없이 키없이 아무것도 일부 대형 테이블을 건네 왔습니다.
나는 일부 열이 고유 한 값을 알고있다. 고유 한 값을 가지고있는 COLS을 finde하기 위해 주어진 테이블에 대한 현명한 방법이 있나요?
테이블에 행이 많은 DISTINCT 값으로 존재하는 경우 지금은 계산에 의해 각 열에 대해 수동으로 할.
SELECT COUNT(DISTINCT col) FROM table
모든 컬럼을 통해 루프 커서를 만들하지만 누군가가 똑똑 또는 기능 구축에 알고 있다면 듣고 싶은 prob는 없습니다.
감사.
해결법
-
==============================
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.여기에 내가 아마 가장 깨끗한 방법으로 생각합니다. 그냥 당신에게 총 행 수 및 각 필드에 대한 고유 값의 수를 제공하는 쿼리를 작성하는 동적 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.당신이 2008을 사용하는 경우, 각 테이블에 대해 후보 키를 반환하는 SSIS에서 데이터 프로파일 링 태스크를 사용할 수 있습니다.
당신이 2008을 사용하는 경우, 각 테이블에 대해 후보 키를 반환하는 SSIS에서 데이터 프로파일 링 태스크를 사용할 수 있습니다.
이 블로그 항목은 매우 간단합니다, 과정을 통해 단계 :
http://consultingblogs.emc.com/jamiethomson/archive/2008/03/04/ssis-data-profiling-task-part-8-candidate-key.aspx
-
==============================
4.내 코드가 무엇을 몇 마디 :
내 코드가 무엇을 몇 마디 :
-
==============================
5.코드의 간단한 라인에 대해 무엇 :
코드의 간단한 라인에 대해 무엇 :
CREATE UNIQUE INDEX index_name ON table_name (column_name);
인덱스가 다음 생성되는 경우 COLUMN_NAME에만 고유 한 값을 가지고있다. 당신의 COLUMN_NAME에 속는가있는 경우, 오류 메시지가 표시됩니다.
from https://stackoverflow.com/questions/6941049/how-to-find-out-whether-a-table-has-some-unique-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 내 기본 키를 선택? (0) | 2020.07.08 |
---|---|
[SQL] 어떻게 두 행을 결합와 MySQL에서 두 개의 타임 스탬프 값 사이의 시간 차이를 계산? (0) | 2020.07.08 |
[SQL] 대량 삽입을 사용할 때 특정 열을 무시 (0) | 2020.07.08 |
[SQL] 어떻게 변경 신원 사양에 대한 표는 정체성 SQL 서버입니다 (0) | 2020.07.08 |
[SQL] MySQL의 기능을 사용하여 테이블을 반환하는 방법 (0) | 2020.07.08 |