SQLServer 모든 데이터베이스의 테이블 및 열 정보를 검색하는 SQL
복사, 편집하여 이용하기 위한 SQL입니다.
자유롭게 사용해도 괜찮습니다.
SQLServer에 있어서, 모든 데이터베이스의 테이블이나 컬럼의 정보를 취득하기 위한 SQL의 병아리입니다.
SQL Server 2014 12.0.x.x에서 동작을 확인하고 있습니다.
모든 데이터베이스의 테이블에 대한 정보를 얻는 SQL
결과 이미지
모든 데이터베이스의 테이블에 대한 정보를 얻습니다.--全てのデータベースのテーブルの情報を取得する。
DECLARE databaseNameList CURSOR FOR SELECT name FROM sys.databases --ここでWHERE条件を指定して対象データベースを絞り込める。
OPEN databaseNameList;
--全てのデータベースの全てのテーブルの情報を取得するSQLを組み立てる。
DECLARE @sql nvarchar(MAX);
SET @sql = '';
--databaseNameList分繰り返す。
DECLARE @databaseName nvarchar(MAX);
FETCH NEXT FROM databaseNameList INTO @databaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF LEN(@sql) > 0
BEGIN
SET @sql += ' UNION '
END
--「UNION 操作の "SQL_Latin1_General_CP1_CI_AS" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。」等と
--エラーになったら、「照合順序の競合時に要COLLATE」とある列に「COLLATE Japanese_CI_AS」等として照合順序を指定する。
--この例では「COLLATE Japanese_CI_AS 」としているが、使用状況に応じて要調整。
SET @sql +=
'SELECT
''' + @databaseName + ''' as "データベース名",
sysobjects.name COLLATE Japanese_CI_AS テーブル名, --照合順序の競合時に要COLLATE
(
SELECT syscolumns.name + '', ''
FROM ['+ @databaseName +'].dbo.syscolumns syscolumns
WHERE sysobjects.id = syscolumns.id
FOR XML PATH('''')
) AS "カラム名一覧"
FROM
['+ @databaseName +'].dbo.sysobjects sysobjects
WHERE
sysobjects.type = ''U''
AND
sysobjects.category = 0
--ここでWHERE条件を指定して内容を絞り込める。
'
FETCH NEXT FROM databaseNameList INTO @databaseName;
END;
CLOSE databaseNameList;
DEALLOCATE databaseNameList;
--print(@sql); --デバッグ用。組み立てたSQLの内容を表示する。
--組み立てたSQLを実行する。
EXEC(@sql);
모든 데이터베이스의 테이블 및 열 정보를 얻는 SQL
결과 이미지
모든 데이터베이스의 테이블과 열에 대한 정보를 얻습니다.--全てのデータベースのテーブルやカラムの情報を取得する。
DECLARE databaseNameList CURSOR FOR SELECT name FROM sys.databases --ここでWHERE条件を指定して対象データベースを絞り込める。
OPEN databaseNameList;
--全てのデータベースのテーブルやカラムの情報を取得するSQLを組み立てる。
DECLARE @sql nvarchar(MAX);
SET @sql = '';
--databaseNameList分繰り返す。
DECLARE @databaseName nvarchar(MAX);
FETCH NEXT FROM databaseNameList INTO @databaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF len(@sql) > 0
BEGIN
SET @sql += ' UNION '
END
--「UNION 操作の "SQL_Latin1_General_CP1_CI_AS" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。」等と
--エラーになったら、「照合順序の競合時に要COLLATE」とある列に「COLLATE Japanese_CI_AS」等として照合順序を指定する。
--この例では「COLLATE Japanese_CI_AS 」としているが、使用状況に応じて要調整。
SET @sql +=
'SELECT
''' + @databaseName + ''' AS データベース,
SCHEMAS.NAME COLLATE Japanese_CI_AS AS スキーマ, --照合順序の競合時に要COLLATE
TABLES.NAME COLLATE Japanese_CI_AS AS テーブル, --照合順序の競合時に要COLLATE
COLUMNS.COLUMN_ID AS [列番号],
COLUMNS.NAME COLLATE Japanese_CI_AS AS 列名, --照合順序の競合時に要COLLATE
TYPES.NAME COLLATE Japanese_CI_AS AS 型, --照合順序の競合時に要COLLATE
CASE
WHEN TYPES.NAME IN (''NVARCHAR'', ''NCHAR'') THEN COLUMNS.MAX_LENGTH / 2
WHEN COLUMNS.PRECISION = 0 THEN COLUMNS.MAX_LENGTH
ELSE COLUMNS.PRECISION
END AS 桁,
COLUMNS.SCALE AS 小数部の桁数,
COLUMNS.MAX_LENGTH AS サイズ,
COLUMNS.IS_NULLABLE AS NULL許容
FROM
[' + @databaseName + '].SYS.TABLES AS TABLES
LEFT JOIN [' + @databaseName + '].SYS.SCHEMAS AS SCHEMAS
ON TABLES.SCHEMA_ID = SCHEMAS.SCHEMA_ID
LEFT JOIN [' + @databaseName + '].SYS.COLUMNS AS COLUMNS
ON TABLES.OBJECT_ID = COLUMNS.OBJECT_ID
LEFT JOIN [' + @databaseName + '].SYS.TYPES AS TYPES
ON COLUMNS.SYSTEM_TYPE_ID = TYPES.SYSTEM_TYPE_ID AND COLUMNS.USER_TYPE_ID = TYPES.USER_TYPE_ID
LEFT JOIN [' + @databaseName + '].SYS.EXTENDED_PROPERTIES AS EXTENDED_PROPERTIES
ON COLUMNS.OBJECT_ID = EXTENDED_PROPERTIES.MAJOR_ID AND COLUMNS.COLUMN_ID = EXTENDED_PROPERTIES.MINOR_ID
--ここでWHERE条件を指定して内容を絞り込める。
'
FETCH NEXT FROM databaseNameList INTO @databaseName;
END;
CLOSE databaseNameList;
DEALLOCATE databaseNameList;
--print(@sql); --デバッグ用。組み立てたSQLの内容を表示する。
--組み立てたSQLを実行する。
EXEC (@sql);
Reference
이 문제에 관하여(SQLServer 모든 데이터베이스의 테이블 및 열 정보를 검색하는 SQL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ken1980/items/ddff5c3c8cb37736eda7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
--全てのデータベースのテーブルの情報を取得する。
DECLARE databaseNameList CURSOR FOR SELECT name FROM sys.databases --ここでWHERE条件を指定して対象データベースを絞り込める。
OPEN databaseNameList;
--全てのデータベースの全てのテーブルの情報を取得するSQLを組み立てる。
DECLARE @sql nvarchar(MAX);
SET @sql = '';
--databaseNameList分繰り返す。
DECLARE @databaseName nvarchar(MAX);
FETCH NEXT FROM databaseNameList INTO @databaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF LEN(@sql) > 0
BEGIN
SET @sql += ' UNION '
END
--「UNION 操作の "SQL_Latin1_General_CP1_CI_AS" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。」等と
--エラーになったら、「照合順序の競合時に要COLLATE」とある列に「COLLATE Japanese_CI_AS」等として照合順序を指定する。
--この例では「COLLATE Japanese_CI_AS 」としているが、使用状況に応じて要調整。
SET @sql +=
'SELECT
''' + @databaseName + ''' as "データベース名",
sysobjects.name COLLATE Japanese_CI_AS テーブル名, --照合順序の競合時に要COLLATE
(
SELECT syscolumns.name + '', ''
FROM ['+ @databaseName +'].dbo.syscolumns syscolumns
WHERE sysobjects.id = syscolumns.id
FOR XML PATH('''')
) AS "カラム名一覧"
FROM
['+ @databaseName +'].dbo.sysobjects sysobjects
WHERE
sysobjects.type = ''U''
AND
sysobjects.category = 0
--ここでWHERE条件を指定して内容を絞り込める。
'
FETCH NEXT FROM databaseNameList INTO @databaseName;
END;
CLOSE databaseNameList;
DEALLOCATE databaseNameList;
--print(@sql); --デバッグ用。組み立てたSQLの内容を表示する。
--組み立てたSQLを実行する。
EXEC(@sql);
결과 이미지
모든 데이터베이스의 테이블과 열에 대한 정보를 얻습니다.
--全てのデータベースのテーブルやカラムの情報を取得する。
DECLARE databaseNameList CURSOR FOR SELECT name FROM sys.databases --ここでWHERE条件を指定して対象データベースを絞り込める。
OPEN databaseNameList;
--全てのデータベースのテーブルやカラムの情報を取得するSQLを組み立てる。
DECLARE @sql nvarchar(MAX);
SET @sql = '';
--databaseNameList分繰り返す。
DECLARE @databaseName nvarchar(MAX);
FETCH NEXT FROM databaseNameList INTO @databaseName;
WHILE @@FETCH_STATUS = 0
BEGIN
IF len(@sql) > 0
BEGIN
SET @sql += ' UNION '
END
--「UNION 操作の "SQL_Latin1_General_CP1_CI_AS" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。」等と
--エラーになったら、「照合順序の競合時に要COLLATE」とある列に「COLLATE Japanese_CI_AS」等として照合順序を指定する。
--この例では「COLLATE Japanese_CI_AS 」としているが、使用状況に応じて要調整。
SET @sql +=
'SELECT
''' + @databaseName + ''' AS データベース,
SCHEMAS.NAME COLLATE Japanese_CI_AS AS スキーマ, --照合順序の競合時に要COLLATE
TABLES.NAME COLLATE Japanese_CI_AS AS テーブル, --照合順序の競合時に要COLLATE
COLUMNS.COLUMN_ID AS [列番号],
COLUMNS.NAME COLLATE Japanese_CI_AS AS 列名, --照合順序の競合時に要COLLATE
TYPES.NAME COLLATE Japanese_CI_AS AS 型, --照合順序の競合時に要COLLATE
CASE
WHEN TYPES.NAME IN (''NVARCHAR'', ''NCHAR'') THEN COLUMNS.MAX_LENGTH / 2
WHEN COLUMNS.PRECISION = 0 THEN COLUMNS.MAX_LENGTH
ELSE COLUMNS.PRECISION
END AS 桁,
COLUMNS.SCALE AS 小数部の桁数,
COLUMNS.MAX_LENGTH AS サイズ,
COLUMNS.IS_NULLABLE AS NULL許容
FROM
[' + @databaseName + '].SYS.TABLES AS TABLES
LEFT JOIN [' + @databaseName + '].SYS.SCHEMAS AS SCHEMAS
ON TABLES.SCHEMA_ID = SCHEMAS.SCHEMA_ID
LEFT JOIN [' + @databaseName + '].SYS.COLUMNS AS COLUMNS
ON TABLES.OBJECT_ID = COLUMNS.OBJECT_ID
LEFT JOIN [' + @databaseName + '].SYS.TYPES AS TYPES
ON COLUMNS.SYSTEM_TYPE_ID = TYPES.SYSTEM_TYPE_ID AND COLUMNS.USER_TYPE_ID = TYPES.USER_TYPE_ID
LEFT JOIN [' + @databaseName + '].SYS.EXTENDED_PROPERTIES AS EXTENDED_PROPERTIES
ON COLUMNS.OBJECT_ID = EXTENDED_PROPERTIES.MAJOR_ID AND COLUMNS.COLUMN_ID = EXTENDED_PROPERTIES.MINOR_ID
--ここでWHERE条件を指定して内容を絞り込める。
'
FETCH NEXT FROM databaseNameList INTO @databaseName;
END;
CLOSE databaseNameList;
DEALLOCATE databaseNameList;
--print(@sql); --デバッグ用。組み立てたSQLの内容を表示する。
--組み立てたSQLを実行する。
EXEC (@sql);
Reference
이 문제에 관하여(SQLServer 모든 데이터베이스의 테이블 및 열 정보를 검색하는 SQL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ken1980/items/ddff5c3c8cb37736eda7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)