解析SQL 表结构信息查询 含主外键、自增长_MySQL
bitsCN.com
最近项目需要做什么数据字典,需要表结构信息。在网上看了许多关于表结构信息的查询,感觉都不怎么样。相对好一点就是《基于SQL2005 SQL2008 表结构信息查询升级版的详解(含外键信息)》 ,但是这里有一点小问题,缺少一个过滤以致运行有一点小bug。在AdventureWorks2012数据库中的Address表查询结果如图:
在查询过滤中我们添加以下信息就ok了:
AND g.class_desc = 'OBJECT_OR_COLUMN'
修改后的SQL如下:
SELECT 表名 = CASE WHEN a.colorder = 1 THEN d.name
ELSE ''
END ,
表说明 = CASE WHEN a.colorder = 1 THEN ISNULL(f.value, '')
ELSE ''
END ,
字段序号 = a.colorder ,
字段名 = a.name ,
标识 = CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END ,
主键 = CASE WHEN EXISTS ( SELECT 1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so ON so.name = so.name
AND so.xtype = 'PK'
WHERE sc.id = a.id
AND sc.colid = a.colid ) THEN '√'
ELSE ''
END ,
外键 = CASE WHEN tony.fkey IS NOT NULL
AND tony.fkey = a.colid THEN '√'
ELSE ''
END ,
外键表 = CASE WHEN tony.fkey IS NOT NULL
AND tony.fkey = a.colid THEN OBJECT_NAME(tony.fkeyid)
ELSE ''
END ,
外键字段 = CASE WHEN tony.fkey IS NOT NULL
AND tony.fkey = a.colid
THEN ( SELECT name
FROM syscolumns
WHERE colid = tony.fkey
AND id = tony.fkeyid
)
ELSE ''
END ,
类型 = b.name ,
长度 = a.length ,
精度 = COLUMNPROPERTY(a.id, a.name, 'PRECISION') ,
小数位数 = ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) ,
允许空 = CASE WHEN a.isnullable = 1 THEN '√'
ELSE ''
END ,
默认值 = ISNULL(e.text, '') ,
字段说明 = ISNULL(g.[value], '') ,
创建时间 = d.crdate ,
更改时间 = CASE WHEN a.colorder = 1 THEN d.refdate
ELSE NULL
END
FROM dbo.syscolumns a
LEFT JOIN dbo.systypes b ON a.xtype = b.xusertype
INNER JOIN dbo.sysobjects d ON a.id = d.id
AND d.xtype = 'U'
AND d.status >= 0
LEFT JOIN dbo.syscomments e ON a.cdefault = e.id
LEFT JOIN sys.extended_properties g ON a.id = g.major_id
AND a.colid = g.minor_id
AND g.class_desc = 'OBJECT_OR_COLUMN'
LEFT JOIN sys.extended_properties f ON d.id = f.major_id
AND f.minor_id = 0
LEFT JOIN sysobjects htl ON htl.parent_obj = d.id
AND htl.xtype = 'F'
LEFT JOIN sysforeignkeys tony ON htl.id = tony.constid
WHERE d.name = 'Address' --这里输入包含表名称的条件
ORDER BY d.id ,
a.colorder
运行结果如图:
我不怎么喜欢它的“类型”信息,一般的varchar都会有长度信息,还有这个查询对于SQL 2012的新数据类型不支持,该SQL里面的嵌套查询比较多,于是我就自己重新写了一个SQL。
这里提醒大家尽量用INFORMATION_SCHEMA.XXX视图而不去用sys.XXX视图。
新的SQL如下:
SELECT
--OBJECT_ID(a.TABLE_SCHEMA + '.' + a.TABLE_NAME) AS [object_id] ,
CASE WHEN a.ORDINAL_POSITION = 1
THEN a.TABLE_SCHEMA + '.' + a.TABLE_NAME
ELSE ''
END AS TABLE_NAME ,
CASE WHEN ( a.ORDINAL_POSITION = 1
AND p1.value IS NOT NULL
) THEN p1.value
ELSE ''
END AS TABLE_Description ,
a.COLUMN_NAME ,
CASE WHEN ( ( CHARINDEX('char', a.DATA_TYPE) > 0
OR CHARINDEX('binary', a.DATA_TYPE) > 0
)
AND a.CHARACTER_MAXIMUM_LENGTH -1
)
THEN a.DATA_TYPE + '('
+ CAST(a.CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ')'
WHEN ( ( CHARINDEX('CHAR', a.DATA_TYPE) > 0
OR CHARINDEX('binary', a.DATA_TYPE) > 0
)
AND a.CHARACTER_MAXIMUM_LENGTH = -1
) THEN a.DATA_TYPE + '(max)'
WHEN ( CHARINDEX('numeric', a.DATA_TYPE) > 0 )
THEN a.DATA_TYPE + '(' + CAST(a.NUMERIC_PRECISION AS VARCHAR(4))
+ ',' + CAST(a.NUMERIC_SCALE AS VARCHAR(4)) + ')'
ELSE a.DATA_TYPE
END AS COLUMN_TYPE ,
CASE WHEN c.IS_IDENTITY = 1 THEN 'YES'
ELSE 'NO'
END AS IS_IDENTITY ,
a.IS_NULLABLE ,
CASE WHEN a.COLUMN_DEFAULT IS NULL THEN ''
ELSE a.COLUMN_DEFAULT
END AS Default_Value ,
CASE WHEN p.value IS NULL THEN ''
ELSE p.value
END AS [COLUMN_Description] ,
CASE WHEN o.name IS NULL THEN ''
ELSE '√'
END AS Is_PrimaryKey ,
CASE WHEN f.parent_column_id IS NULL THEN ''
ELSE '√'
END AS Is_Foreignkeys ,
CASE WHEN referenced_object_id IS NULL THEN ''
ELSE OBJECT_NAME(referenced_object_id)
END AS Foreign_Table ,
CASE WHEN referenced_object_id IS NULL THEN ''
ELSE ( SELECT name
FROM sys.columns
WHERE object_id = f.referenced_object_id
AND column_id = f.referenced_column_id
)
END AS Foreign_key
FROM INFORMATION_SCHEMA.COLUMNS a
INNER JOIN sys.columns c ON OBJECT_ID(a.TABLE_SCHEMA + '.'
+ a.TABLE_NAME) = c.OBJECT_ID
AND a.COLUMN_NAME = c.NAME
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE b ON a.TABLE_SCHEMA = b.TABLE_SCHEMA
AND a.TABLE_NAME = b.TABLE_NAME
AND a.COLUMN_NAME = b.COLUMN_NAME
LEFT JOIN sys.sysobjects o ON o.name = b.CONSTRAINT_NAME
AND o.xtype = 'PK'
LEFT JOIN sys.extended_properties p ON OBJECT_ID(a.TABLE_SCHEMA + '.'
+ a.TABLE_NAME) = p.major_id
AND a.Ordinal_position = p.minor_id
AND p.class_desc = 'OBJECT_OR_COLUMN'
LEFT JOIN sys.extended_properties p1 ON OBJECT_ID(a.TABLE_SCHEMA + '.'
+ a.TABLE_NAME) = p1.major_id
AND p1.minor_id = 0
LEFT JOIN SYS.foreign_key_columns f ON OBJECT_ID(a.TABLE_SCHEMA + '.'
+ a.TABLE_NAME) = f.parent_object_id
AND a.ORDINAL_POSITION = f.parent_column_id
WHERE a.TABLE_NAME = 'Address'
-- a.TABLE_NAME IN (SELECT name FROM sys.tables)
ORDER BY a.TABLE_SCHEMA,a.TABLE_NAME, a.ORDINAL_POSITION
运行效果如图:
有不对的地方还请大家拍砖!谢谢!bitsCN.com

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Microsoft Word 문서는 저장 시 일부 메타데이터를 포함합니다. 이러한 세부 정보는 문서 작성 날짜, 작성자, 수정 날짜 등 문서 식별에 사용됩니다. 또한 문자 수, 단어 수, 단락 수 등과 같은 기타 정보도 있습니다. 다른 사람이 값을 알 수 없도록 작성자나 마지막 수정 정보 또는 기타 정보를 제거하려는 경우 방법이 있습니다. 이번 글에서는 문서 작성자와 최종 수정 정보를 제거하는 방법을 살펴보겠습니다. Microsoft Word 문서에서 작성자 및 마지막 수정 정보 제거 1단계 – 다음으로 이동

간단하고 이해하기 쉬운 PyCharm 프로젝트 패키징 방법을 공유하세요. Python의 인기로 인해 점점 더 많은 개발자가 PyCharm을 Python 개발의 주요 도구로 사용하고 있습니다. PyCharm은 개발 효율성을 향상시키는 데 도움이 되는 다양한 편리한 기능을 제공하는 강력한 통합 개발 환경입니다. 중요한 기능 중 하나는 프로젝트 패키징입니다. 이 글에서는 간단하고 이해하기 쉬운 방식으로 PyCharm에서 프로젝트를 패키징하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 왜 패키지 프로젝트인가? Python으로 개발됨

페르마의 마지막 정리, AI가 정복할 것인가? 그리고 무엇보다 가장 의미 있는 부분은 AI가 풀려고 하는 페르마의 마지막 정리가 바로 AI가 쓸모없다는 것을 증명한다는 점이다. 옛날에는 수학이 순수한 인간 지능의 영역에 속했지만 지금은 이 영역이 고급 알고리즘에 의해 해독되고 짓밟히고 있습니다. Image 페르마의 마지막 정리는 수세기 동안 수학자들을 당황하게 만든 "악명 높은" 퍼즐입니다. 이는 1993년에 입증되었으며 이제 수학자들은 컴퓨터를 사용하여 증명을 재현하는 큰 계획을 세웁니다. 그들은 이 버전의 증명에 논리적 오류가 있으면 컴퓨터로 확인할 수 있기를 바랍니다. 프로젝트 주소: https://github.com/riccardobrasca/flt

제목: PyCharm에 대해 자세히 알아보기: 프로젝트를 삭제하는 효율적인 방법 최근 몇 년 동안 강력하고 유연한 프로그래밍 언어인 Python을 점점 더 많은 개발자가 선호하고 있습니다. Python 프로젝트 개발에서는 효율적인 통합 개발 환경을 선택하는 것이 중요합니다. 강력한 통합 개발 환경인 PyCharm은 Python 개발자에게 프로젝트 디렉터리를 빠르고 효율적으로 삭제하는 것을 포함하여 다양한 편리한 기능과 도구를 제공합니다. 다음은 PyCharm에서 삭제를 사용하는 방법에 중점을 둡니다.

PyCharm은 풍부한 개발 도구와 환경 구성을 제공하는 강력한 Python 통합 개발 환경으로, 개발자가 코드를 보다 효율적으로 작성하고 디버그할 수 있습니다. Python 프로젝트 개발에 PyCharm을 사용하는 과정에서 Python 환경이 설치되지 않은 컴퓨터에서 실행하기 위해 프로젝트를 실행 가능한 EXE 파일로 패키징해야 하는 경우가 있습니다. 이 기사에서는 PyCharm을 사용하여 프로젝트를 실행 가능한 EXE 파일로 변환하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 머리

iOS17의 iPhone에서 GroceryList를 만드는 방법 미리 알림 앱에서 GroceryList를 만드는 것은 매우 간단합니다. 목록을 추가하고 항목으로 채우면 됩니다. 앱은 자동으로 항목을 카테고리별로 분류하며, 파트너나 플랫 파트너와 협력하여 매장에서 구매해야 할 항목의 목록을 만들 수도 있습니다. 이를 위한 전체 단계는 다음과 같습니다. 1단계: iCloud 미리 알림 켜기 이상하게 들리겠지만 Apple에서는 iOS17에서 GroceryList를 생성하려면 iCloud에서 미리 알림을 활성화해야 한다고 말합니다. 단계는 다음과 같습니다. iPhone의 설정 앱으로 이동하여 [사용자 이름]을 탭하세요. 다음으로 i를 선택하세요.

시스템 정보 사용 시작을 클릭하고 시스템 정보를 입력합니다. 아래 이미지에 표시된 대로 프로그램을 클릭하기만 하면 됩니다. 여기에서는 대부분의 시스템 정보를 찾을 수 있으며, 그 중 하나는 그래픽 카드 정보입니다. 시스템 정보 프로그램에서 구성 요소를 확장한 다음 표시를 클릭합니다. 프로그램이 필요한 모든 정보를 수집하도록 하고, 준비가 되면 시스템에서 그래픽 카드별 이름과 기타 정보를 찾을 수 있습니다. 그래픽 카드가 여러 개 있더라도 여기에서 컴퓨터에 연결된 전용 및 통합 그래픽 카드와 관련된 대부분의 콘텐츠를 찾을 수 있습니다. 장치 관리자 사용 Windows 11 대부분의 다른 Windows 버전과 마찬가지로 장치 관리자에서 컴퓨터의 그래픽 카드를 찾을 수도 있습니다. 시작을 클릭한 다음

반응 프로젝트 시작 시 오류 해결 방법: 1. 프로젝트 폴더에 들어가서 프로젝트를 시작한 후 오류 메시지를 확인합니다. 2. "npm install" 또는 "npm install React-scripts" 명령을 실행합니다. 3. "npm install"을 실행합니다. @ant-design/ pro-field --save" 명령.
