# SQL ## MS SQL ### 查詢 DB 整個 Schema 的欄位 ```sql= select t.[name] 'Table', c.[name] 'Column', case when d.[name] like '%char' then d.[name] + '(' + cast( c.max_length / 2 as nvarchar) + ')' else d.[name] end 'Data Type', iif(c.[is_identity] = 1 ,'PK','') 'Is Id', iif(c.[is_nullable] = 1 ,'O','') 'Is Nullable', '' note, case when fk.object_id is not null then '>-' else null end as rel, schema_name(pk_tab.schema_id) + '.' + pk_tab.name as primary_table, pk_col.name as pk_column_name, fk_cols.constraint_column_id as no, fk.name as fk_constraint_name from sys.schemas s inner join sys.tables t on s.schema_id = t.schema_id inner join sys.columns c on t.object_id = c.object_id inner join sys.types d on c.user_type_id = d.user_type_id left outer join sys.foreign_key_columns fk_cols on fk_cols.parent_object_id = t.object_id and fk_cols.parent_column_id = c.column_id left outer join sys.foreign_keys fk on fk.object_id = fk_cols.constraint_object_id left outer join sys.tables pk_tab on pk_tab.object_id = fk_cols.referenced_object_id left outer join sys.columns pk_col on pk_col.column_id = fk_cols.referenced_column_id and pk_col.object_id = fk_cols.referenced_object_id ``` ### 確認DB空間 ```sql= SELECT DB_NAME(database_id) AS DatabaseName, Name AS Logical_Name, Physical_Name, (size * 8) / 1024 SizeMB FROM sys.master_files WHERE DB_NAME(database_id) = 'MY_DB' ``` ### 確認Table空間 ```sql= SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows, SUM(a.total_pages) * 8 AS TotalSpaceKB, CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00)/1024, 2) AS NUMERIC(36, 2)) AS TotalSpaceMB, SUM(a.used_pages) * 8 AS UsedSpaceKB, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00)/1024, 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB, CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY TotalSpaceMB DESC, t.Name ``` ### 針對特定store procedure使用欄位查詢 ```sql= -- 搜尋預存程序定義中是否包含特定字串 SELECT [Scehma] = SCHEMA_NAME(o.schema_id) ,o.Name ,o.type FROM sys.sql_modules m INNER JOIN sys.objects o ON o.object_id = m.object_id WHERE m.definition LIKE '%TableName%'; ``` ## Oracle ### Table 被用到哪一個store procedure或package ```sql= select distinct owner, name, type from all_source where upper(text) like '%StoreProcedure%' order by owner, name, type ``` ### 已經確定在哪個schema (user account)下可用user_source ```sql= select distinct name, type from user_source where upper(text) like '%user account%' order by name, type ``` ### 查詢Table中的欄位 ```sql= select table_name from all_tab_columns where column_name = 'PICK_COLUMN'; ``` ### 列出特定Schema下所有資料表及欄位型別、長度、精準位數、NULLABLE、預設值 ```sql= SELECT C.OWNER, C.TABLE_NAME, C.COLUMN_ID, C.COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_DEFAULT, NULLABLE, COMMENTS FROM ALL_TAB_COLUMNS C JOIN ALL_TABLES T ON C.OWNER = T.OWNER AND C.TABLE_NAME = T.TABLE_NAME LEFT JOIN ALL_COL_COMMENTS R ON C.OWNER = R.Owner AND C.TABLE_NAME = R.TABLE_NAME AND C.COLUMN_NAME = R.COLUMN_NAME WHERE C.OWNER = 'DBAccount' ORDER BY C.TABLE_NAME, C.COLUMN_ID ``` ### 取得所有索引資料 ```sql= SELECT I.TABLE_OWNER, I.TABLE_NAME, I.INDEX_NAME, I.INDEX_TYPE, I.UNIQUENESS, C.COLUMN_POSITION, C.COLUMN_NAME, C.DESCEND FROM ALL_INDEXES I JOIN ALL_IND_COLUMNS C ON I.TABLE_OWNER = C.TABLE_OWNER AND I.INDEX_NAME = C.INDEX_NAME WHERE C.TABLE_OWNER = 'DBAccount' ORDER BY I.TABLE_NAME, I.INDEX_NAME, COLUMN_POSITION ``` ### 取得主鍵值(Primary Key)欄位 ```sql= SELECT C.OWNER, C.TABLE_NAME, D.POSITION, D.COLUMN_NAME FROM ALL_CONSTRAINTS C JOIN ALL_CONS_COLUMNS D ON C.OWNER = D.OWNER AND C.CONSTRAINT_NAME = D.CONSTRAINT_NAME WHERE C.CONSTRAINT_TYPE = 'P' AND C.OWNER = 'DBAccount' ORDER BY C.TABLE_NAME, D.POSITION ``` 參考自: https://stackoverflow.com/questions/4849652/find-all-tables-containing-column-with-specified-name-ms-sql-server ###### tags: `SQL` `ms sql`