设为首页 收藏本站
查看: 596|回复: 0

[经验分享] ^全^ 获取SQL SERVER2000/2005、MySql、Oracle元数据的SQL语句(2)

[复制链接]

尚未签到

发表于 2018-10-17 08:41:04 | 显示全部楼层 |阅读模式
  FROM
  dbo.sysindexes i
  INNER JOIN  dbo.sysfilegroups s ON i.groupid = s.groupid
  LEFT OUTER JOIN dbo.sysconstraints c ON c.[id] = OBJECT_ID(@tablename) AND i.name = OBJECT_NAME(c.constid)
  WHERE
  i.id = OBJECT_ID(@tablename)
  AND i.indid > 0
  AND i.indid < 255
  AND INDEXPROPERTY(OBJECT_ID(@tablename), i.name, N'IsStatistics') = 0 -- filter out statistics DSC0000.gif
  AND INDEXPROPERTY(OBJECT_ID(@tablename), i.name, N'IsAutoStatistics') = 0 -- filter out statistics
  AND INDEXPROPERTY(OBJECT_ID(@tablename), i.name, N'IsHypothetical') = 0 -- filter out statistics
  ORDER BY
  i.indid&quot;;
  private const string SQL_GetTableKeys = &quot;EXEC sp_MStablerefs @tablename, N'actualtables', N'both', null&quot;;
  private const string SQL_GetObjectData = &quot;SELECT * FROM [{0}].[{1}]&quot;;
  private const string SQL_GetObjectSource = &quot;EXEC sp_helptext @objectname&quot;;
  private const string SQL2005_GetColumnConstraints = @&quot;
  SELECT
  object_name(const.constid) AS ConstraintName,
  CASE
  WHEN const.status & 5 = 5 THEN 'DEFAULT'
  WHEN const.status & 4 = 4 THEN 'CHECK'
  ELSE ''
  END AS ConstraintType,
  constdef.text AS ConstraintDef
  FROM
  dbo.sysobjects AS tbl
  INNER JOIN dbo.syscolumns AS clmns ON clmns.id=tbl.id
  INNER JOIN dbo.sysconstraints const ON clmns.id = const.id and clmns.colid = const.colid
  LEFT OUTER JOIN dbo.syscomments constdef ON const.constid = constdef.id
  WHERE
  SCHEMA_NAME(tbl.uid) = @SchemaName
  AND tbl.[name] = @TableName
  AND clmns.name = @ColumnName
  AND (const.status & 4 = 4 OR const.status & 5 = 5)&quot;;
  private const string SQL2000_GetColumnConstraints = @&quot;
  SELECT
  object_name(const.constid) AS ConstraintName,
  CASE
  WHEN const.status & 5 = 5 THEN 'DEFAULT'
  WHEN const.status & 4 = 4 THEN 'CHECK'
  ELSE ''
  END AS ConstraintType,
  constdef.text AS ConstraintDef
  FROM
  dbo.sysobjects AS tbl
  INNER JOIN dbo.sysusers AS stbl ON stbl.[uid] = tbl.[uid]
  INNER JOIN dbo.syscolumns AS clmns ON clmns.id=tbl.id
  INNER JOIN dbo.sysconstraints const ON clmns.id = const.id and clmns.colid = const.colid
  LEFT OUTER JOIN dbo.syscomments constdef ON const.constid = constdef.id
  WHERE
  stbl.[name] = @SchemaName
  AND tbl.[name] = @TableName
  AND clmns.name = @ColumnName
  AND (const.status & 4 = 4 OR const.status & 5 = 5)&quot;;
  private const string SQL2005_GetCommands = @&quot;
  SELECT
  object_name(id) AS OBJECT_NAME,
  schema_name(uid) AS USER_NAME,
  crdate AS DATE_CREATED,
  id as OBJECT_ID
  FROM
  sysobjects
  WHERE
  type = N'P'
  AND permissions(id) & 32  0
  AND ObjectProperty(id, N'IsMSShipped') = 0
  AND NOT EXISTS (SELECT * FROM sys.extended_properties WHERE major_id = id AND name = 'microsoft_database_tools_support' AND value = 1)
  ORDER BY object_name(id)&quot;;
  private const string SQL_GetCommands = @&quot;
  SELECT
  object_name(id) AS OBJECT_NAME,
  user_name(uid) AS USER_NAME,
  crdate AS DATE_CREATED,
  id as OBJECT_ID
  FROM
  sysobjects
  WHERE
  type = N'P'
  AND permissions(id) & 32  0
  AND ObjectProperty(id, N'IsMSShipped') = 0
  ORDER BY object_name(id)&quot;;
  private const string SQL_GetCommandParameters = @&quot;EXEC sp_procedure_params_rowset @CommandName, 1, @SchemaName, NULL&quot;;
  private const string SQL2005_GetCommandParameters = @&quot;
  SELECT
  DB_NAME() AS [PROCEDURE_CATALOG],
  @SchemaName AS [PROCEDURE_SCHEMA],
  NULL AS [PROCEDURE_NAME],
  '@RETURN_VALUE' AS [PARAMETER_NAME],
  0 AS [ORDINAL_POSITION],
  CAST(4 AS smallint) AS [PARAMETER_TYPE],
  0 AS [PARAMETER_HASDEFAULT],
  NULL AS [PARAMETER_DEFAULT],
  CAST(0 AS bit) AS [IS_NULLABLE],
  0 AS [DATA_TYPE],
  NULL AS [CHARACTER_MAXIMUM_LENGTH],
  NULL AS [CHARACTER_OCTET_LENGTH],
  CAST(10 AS smallint) AS [NUMERIC_PRECISION],
  CAST(NULL AS smallint) AS [NUMERIC_SCALE],
  NULL AS [DESCRIPTION],
  'int' AS [TYPE_NAME],
  'int' AS [LOCAL_TYPE_NAME]
  UNION ALL
  SELECT
  DB_NAME() AS [PROCEDURE_CATALOG],
  SCHEMA_NAME(sp.schema_id) AS [PROCEDURE_SCHEMA],
  NULL AS [PROCEDURE_NAME],
  param.name AS [PARAMETER_NAME],
  param.parameter_id AS [ORDINAL_POSITION],
  CAST(CASE WHEN param.is_output = 1 THEN 2 ELSE 1 END AS smallint) AS [PARAMETER_TYPE],
  0 AS [PARAMETER_HASDEFAULT],
  NULL AS [PARAMETER_DEFAULT],
  CAST(1 AS bit) AS [IS_NULLABLE],
  0 AS [DATA_TYPE],
  CAST(CASE WHEN baset.name IN (N'nchar', N'nvarchar') AND param.max_length  -1 THEN param.max_length/2 ELSE param.max_length END AS int) AS [CHARACTER_MAXIMUM_LENGTH],
  NULL AS [CHARACTER_OCTET_LENGTH],
  CAST(param.precision AS smallint) AS [NUMERIC_PRECISION],
  CAST(param.scale AS smallint) AS [NUMERIC_SCALE],
  NULL AS [DESCRIPTION],
  ISNULL(baset.name, N'') AS [TYPE_NAME],
  ISNULL(baset.name, N'') AS [LOCAL_TYPE_NAME]
  FROM
  sys.all_objects AS sp
  INNER JOIN sys.all_parameters AS param ON param.object_id=sp.object_id
  LEFT OUTER JOIN sys.types AS baset ON baset.user_type_id = param.system_type_id and baset.user_type_id = baset.system_type_id
  WHERE
  (sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=@CommandName and SCHEMA_NAME(sp.schema_id)=@SchemaName)
  ORDER BY
  5 ASC&quot;;
  private const string SQL_GetExtendedProperties = @&quot;
  SELECT
  p.name AS PROPERTY_NAME,
  p.value AS PROPERTY_VALUE,
  SQL_VARIANT_PROPERTY(p.value,'BaseType') AS UNDERLYING_TYPE,
  SQL_VARIANT_PROPERTY(p.value,'MaxLength') AS CHARACTER_MAXIMUM_LENGTH,
  SQL_VARIANT_PROPERTY(p.value,'Precision') AS NUMERIC_PRECISION,
  SQL_VARIANT_PROPERTY(p.value,'Scale') AS NUMERIC_SCALE
  FROM
  ::fn_listextendedproperty(NULL, @level0type, @level0name, @level1type, @level1name, @level2type, @level2name) p&quot;;
  private const string SQL_GetSqlServerVersion = &quot;EXEC master.dbo.xp_msver ProductVersion&quot;;
  #endregion
  2.     MySql
  2.1     GetTables
&quot;SELECT TABLE_NAME, '' OWNER, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{0}' AND TABLE_TYPE = 'BASE TABLE' ORDER BY 1&quot;  2.2     GetTableColumns
&quot;SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION,&quot;+ &quot; NUMERIC_SCALE, CASE IS_NULLABLE WHEN 'NO' THEN 0 ELSE 1 END IS_NULLABLE, COLUMN_TYPE&quot;+ &quot; FROM INFORMATION_SCHEMA.COLUMNS&quot;+ &quot; WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'&quot;+ &quot; ORDER BY ORDINAL_POSITION&quot;  2.3     GetViews
&quot;SELECT TABLE_NAME, '' OWNER, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{0}' AND TABLE_TYPE = 'VIEW' ORDER BY 1&quot;  2.4     GetViewColumns
&quot;SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION,&quot;+ &quot; NUMERIC_SCALE, CASE IS_NULLABLE WHEN 'NO' THEN 0 ELSE 1 END IS_NULLABLE, COLUMN_TYPE&quot;+ &quot; FROM INFORMATION_SCHEMA.COLUMNS &quot;+ &quot;WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'&quot;+ &quot;ORDER BY ORDINAL_POSITION&quot;  2.5     GetTablePrimaryKey
&quot;SELECT t1.CONSTRAINT_NAME, t1.COLUMN_NAME&quot;+ &quot; FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE t1&quot;+ &quot;  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t2&quot;+ &quot;  ON t2.TABLE_SCHEMA = t1.TABLE_SCHEMA&quot;+ &quot;  AND t2.TABLE_NAME = t1.TABLE_NAME&quot;+ &quot;  AND t2.CONSTRAINT_NAME = t1.CONSTRAINT_NAME&quot;+ &quot; WHERE t1.TABLE_SCHEMA = '{0}' AND t1.TABLE_NAME = '{1}'&quot;+ &quot; AND t2.CONSTRAINT_TYPE = 'PRIMARY KEY'&quot;+ &quot; ORDER BY t1.ORDINAL_POSITION&quot;  2.6     GetTableIndexes
&quot;SELECT INDEX_NAME, COUNT(*) AS COLUMN_COUNT, MAX(NON_UNIQUE) NON_UNIQUE,&quot;+ &quot; CASE INDEX_NAME WHEN 'PRIMARY' THEN 1 ELSE 0 END IS_PRIMARY&quot;+ &quot; FROM INFORMATION_SCHEMA.STATISTICS&quot;+ &quot; WHERE  TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'&quot;+ &quot; GROUP BY INDEX_NAME&quot;+ &quot; ORDER BY INDEX_NAME;&quot;+ &quot; SELECT INDEX_NAME, COLUMN_NAME&quot;+ &quot; FROM INFORMATION_SCHEMA.STATISTICS&quot;+ &quot; WHERE  TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'&quot;+ &quot; ORDER BY INDEX_NAME, SEQ_IN_INDEX;&quot;  2.7     GetTableKeys 注意这里分别调用 2.7.1和2.7.2才能全部取到
  2.7.1     GetMyTableKeys
&quot;SELECT CONSTRAINT_NAME&quot;+ &quot; FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS t1&quot;+ &quot; WHERE t1.TABLE_SCHEMA = '{0}' AND t1.TABLE_NAME = '{1}'&quot;+ &quot;  AND CONSTRAINT_TYPE = 'FOREIGN KEY';&quot;+ &quot; SELECT t1.CONSTRAINT_NAME, t1.COLUMN_NAME, t1.POSITION_IN_UNIQUE_CONSTRAINT,&quot;+ &quot;  t1.REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME&quot;+ &quot; FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE t1&quot;+ &quot;  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t2&quot;+ &quot;  ON t2.TABLE_SCHEMA = t1.TABLE_SCHEMA&quot;+ &quot;  AND t2.TABLE_NAME = t1.TABLE_NAME&quot;+ &quot;  AND t2.CONSTRAINT_NAME = t1.CONSTRAINT_NAME&quot;+ &quot; WHERE t1.TABLE_SCHEMA = '{0}' AND t1.TABLE_NAME = '{1}'&quot;+ &quot;  AND t2.CONSTRAINT_TYPE = 'FOREIGN KEY'&quot;+ &quot; ORDER BY t1.CONSTRAINT_NAME, t1.POSITION_IN_UNIQUE_CONSTRAINT&quot;  2.7.2     GetOthersTableKeys
&quot;SELECT DISTINCT CONSTRAINT_NAME&quot;+ &quot; FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE t1&quot;+ &quot; WHERE t1.TABLE_SCHEMA = '{0}' AND t1.REFERENCED_TABLE_NAME = '{1}';&quot;+ &quot; SELECT t1.CONSTRAINT_NAME, t1.TABLE_NAME, t1.COLUMN_NAME, t1.POSITION_IN_UNIQUE_CONSTRAINT,&quot;+ &quot;  t1.REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME&quot;+ &quot; FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE t1&quot;+ &quot;  INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t2&quot;+ &quot;  ON t2.TABLE_SCHEMA = t1.TABLE_SCHEMA&quot;+ &quot;  AND t2.TABLE_NAME = t1.TABLE_NAME&quot;+ &quot;  AND t2.CONSTRAINT_NAME = t1.CONSTRAINT_NAME&quot;+ &quot; WHERE t1.TABLE_SCHEMA = '{0}' AND t1.REFERENCED_TABLE_NAME = '{1}'&quot;+ &quot;  AND t2.CONSTRAINT_TYPE = 'FOREIGN KEY'&quot;+ &quot; ORDER BY t1.CONSTRAINT_NAME, t1.POSITION_IN_UNIQUE_CONSTRAINT&quot;  2.8     GetTableData     &quot;SELECT * FROM {0}&quot;
  2.9     GetViewData     &quot;SELECT * FROM {0}&quot;
  2.10     GetViewText
&quot;SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}'&quot;  2.11     GetCommands     string.Format参数:数据库名
&quot;SELECT ROUTINE_NAME, '' OWNER, CREATED FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '{0}' AND ROUTINE_TYPE = 'PROCEDURE' ORDER BY 1&quot;
  2.12     GetCommandParameters     >_<  ,没有提供,显示:throw new NotSupportedException(&quot;GetCommandParameters() is not supported in this>  2.13     GetCommandText
&quot;SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '{0}' AND ROUTINE_NAME = '{1}'&quot;  3.     Oracle
  3.1     GetTables
&quot;SELECT owner, object_name, created FROM all_objects WHERE (owner in ( select USERNAME from user_users  )) AND object_type = 'TABLE'      ORDER BY owner,    object_name&quot;  3.2     GetTableColumns
@&quot;select cols.column_name,  cols.data_type,
  cols.data_length,
  cols.data_precision,
  cols.data_scale,
  cols.nullable,
  cmts.comments
  from  all_tab_columns cols,
  all_col_comments cmts
  where
  cols.owner = '{0}'
  and cols.table_name = '{1}'
  and cols.owner = cmts.owner
  and cols.table_name = cmts.table_name
  and cols.column_name = cmts.column_name
  order by column_id
&quot;  3.3     GetViews
@&quot;select  v.owner, v.view_name, o.created
  from all_views   v,
  all_objects o
  where v.view_name = o.object_name
  and o.object_type = 'VIEW'
  and (v.owner in ( select USERNAME from user_users  ))
  order by v.owner, v.view_name
&quot;  3.4     GetViewColumns
@&quot;select cols.column_name,  cols.data_type,
  cols.data_length,
  cols.data_precision,
  cols.data_scale,
  cols.nullable,
  cmts.comments
  from  all_tab_columns cols,
  all_col_comments cmts
  where
  cols.owner = '{0}'
  and cols.table_name = '{1}'
  and cols.owner = cmts.owner
  and cols.table_name = cmts.table_name
  and cols.column_name = cmts.column_name
  order by column_id
&quot;  3.5     GetTablePrimaryKey
@&quot;  select
  cols.constraint_name,
  cols.column_name,
  cols.position
  from
  all_constraints     cons,
  all_cons_columns    cols
  where
  cons.OWNER = '{0}'
  and cons.table_name = '{1}'
  and cons.constraint_type='P'
  and cols.owner = cons.owner
  and cols.table_name = cons.table_name
  and cols.constraint_name = cons.constraint_name
  order by cons.constraint_name, cols.position
&quot;  3.6     GetTableIndexes
@&quot;  select        idx.owner, idx.uniqueness, con.constraint_type, idx.table_type, col.*
  from        all_ind_columns col,
  all_indexes idx,
  all_constraints con
  where        idx.table_owner = '{0}'
  AND idx.table_name = '{1}'
  AND idx.owner = col.index_owner
  AND idx.index_name = col.index_name
  AND idx.owner = con.owner (+)
  AND idx.table_name = con.table_name(+)
  AND idx.index_name = con.constraint_name(+)
&quot;  3.7     GetTableKeys
@&quot;select  cols.constraint_name,
  cols.column_name,
  cols.position,
  r_cons.table_name related_table_name,
  r_cols.column_name related_column_name
  from
  all_constraints     cons,
  all_cons_columns    cols,
  all_constraints     r_cons,
  all_cons_columns    r_cols
  where cons.OWNER = '{0}'
  and cons.table_name = '{1}'
  and cons.constraint_type='R'
  and cols.owner = cons.owner
  and cols.table_name = cons.table_name
  and cols.constraint_name = cons.constraint_name
  and r_cols.owner = cons.r_owner
  and r_cols.constraint_name = cons.r_constraint_name
  and r_cons.owner = r_cols.owner
  and r_cons.table_name = r_cols.table_name
  and r_cons.constraint_name = r_cols.constraint_name
  order by cons.constraint_name, cols.position
&quot;  3.8     GetTableData     &quot;SELECT * FROM {0}.{1}&quot;
  3.9     GetViewData     &quot;SELECT * FROM {0}.{1}&quot;
  3.10     GetViewText
@&quot;select        text  from        all_views
  where        owner = '{0}'
  and view_name = '{1}'
&quot;  3.11     GetCommands
@&quot;    select methods.owner,  methods.package_name,
  methods.object_name,
  methods.overload,
  ao.object_type,
  ao.created,
  ao.status,
  ao.object_id
  from
  (select distinct owner, package_name, object_name, overload, object_id from ALL_ARGUMENTS
  where (owner in ( select USERNAME from user_users  ))
  ) methods,
  all_objects ao
  where ao.object_id = methods.object_id
  order by methods.owner, methods.package_name, methods.object_name
&quot;  3.12     GetCommandParameters
@&quot;select  ARGUMENT_NAME,
  POSITION,
  SEQUENCE,
  DATA_LEVEL,
  DATA_TYPE,
  IN_OUT,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE
  from ALL_ARGUMENTS
  where object_ID={0}
  and object_name = '{1}'
  and {2}
  order by position
&quot;  备注:{2}参数 源码是:overload > 0 ? &quot;overload = &quot; + overload : &quot;overload is null&quot;,由于我对Oracle并不熟悉,并且翻了一点资料,得知这个是超载参数的设置,熟悉的人自己来配吧,有精通之人劳烦告知一下此处默认语句该如何配置。
  3.13     GetCommandText  >_< 没有提供!信息如下:throw new NotImplementedException(&quot;Retrieval of command text has not yet been implemented.&quot;);
  结束
  对于元数据的获取,用获取数据库结构的奥义......(无码,完全版,未删节) 的文章也不错,但是没有办法取得默认值,所以大家根据自己的要求选择获取的方式就行了。由于处于Ctrl+C和Ctrl+V,难免脑袋有些发麻,发现张冠李戴的情况请速报,以便及时更新: )
  注意
  本文的SQL语句是直接完全拷贝的源代码,SQLSERVER 2000大部分测试没有问题,其他的请自行测试 !
  ps:     本来是想把代码折叠一下的,但是这样方便拷贝:)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622562-1-1.html 上篇帖子: Java JDBC连接oracle、SQL server、My Sql数据库的驱动 下篇帖子: SQL Manager for SQL Server v3.9 改善了多个编辑器工具的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表