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

[经验分享] 获取创建SQL Server对象的定义文本

[复制链接]
发表于 2018-10-16 09:51:10 | 显示全部楼层 |阅读模式
  引用自《SQL Server 2012 Internals》
  “
  As views, these metadata objects are based on an underlying Transact-SQL (T-SQL) defnition. The most straightforward way to see the defnition of these views is by using the object_defnition function. (You can also see the defnition of these system views by using sp_helptext or by selecting from the catalog view sys.system_sql_modules.) So to see the defnition of sys.tables, you can execute the following:
  SELECT object_definition (object_id('sys.tables'));
  ”
  方法一:
  OBJECT_DEFINITION
  返回指定对象的定义的 Transact-SQL 源文本。
SELECT object_definition (object_id('sys.tables'));  https://msdn.microsoft.com/zh-cn/library/ms176090.aspx
  方法二:
  sp_helptext
  显示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)。
EXEC sp_helptext 'sys.tables';  
GO
  https://msdn.microsoft.com/zh-cn/library/ms176112.aspx
  方法三:
  sys.system_sql_modules
  为每个包含 SQL 语言定义模块的系统对象返回一行。 类型为 FN、IF、P、PC、TF 和 V 的系统对象具有关联的 SQL 模块。 若要标识该包含对象,可以将该视图联接到 sys.system_objects。
SELECT ssm.object_id,  
    OBJECT_NAME(ssm.object_id) AS object_name,
  
    SCHEMA_NAME(t.schema_id) AS schema_name,
  
    t.type,
  
    t.type_desc,
  
    ssm.definition
  
FROM sys.system_sql_modules ssm
  
    INNER JOIN sys.system_objects t ON ssm.object_id = t.object_id
  
WHERE t.type='P'
  
GO
  https://msdn.microsoft.com/zh-cn/library/ms188034.aspx
  示例:
select object_name(m.object_id) as name, *  
from sys.system_sql_modules m
  
inner join sys.system_objects t on m.object_id=t.object_id
  
where type='P' and name='sp_renamedb'
  

  
select object_name(m.object_id) as name, *
  
from sys.system_sql_modules m
  
inner join sys.system_objects t on m.object_id=t.object_id
  
where type='V' and name='systypes'
  sys.sql_modules
  对每个 SQL 语言定义的模块对象都返回一行。类型为 P、RF、V、TR、FN、IF、TF 和 R 的对象均有关联的 SQL 模块。在此视图中,独立的默认值,即 D 类型的对象也具有 SQL 模块定义。有关这些类型的说明,请参阅 sys.objects 目录视图中的类型列。
SELECT sm.object_id,  
    OBJECT_NAME(sm.object_id) AS object_name,
  
    SCHEMA_NAME(o.schema_id) AS schema_name,
  
    o.type,
  
    o.type_desc,
  
    sm.definition
  
FROM sys.sql_modules AS sm
  
    INNER JOIN sys.objects AS o ON sm.object_id = o.object_id
  
ORDER BY o.type;
  
GO
  https://technet.microsoft.com/zh-cn/library/ms175081.aspx
  示例:
SELECT OBJECT_NAME(object_id)  
    FROM sys.sql_modules
  
    WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1
  
    AND definition LIKE '%yourText%'
  sys.all_sql_modules
  返回 sys.sql_modules 和 sys.system_sql_modules 的联合。
  https://msdn.microsoft.com/zh-cn/library/ms184389.aspx
  方法四:
  INFORMATION_SCHEMA
  信息架构视图是 SQL Server 提供的几种获取元数据的方法之一。 信息架构视图提供独立于系统表的内部 SQL Server 元数据视图。 尽管已经对基础系统表进行了重要的修改,信息架构视图仍然可使应用程序正常工作。 SQL Server 中包含的信息架构视图符合 ISO 标准中的信息架构定义。
  在引用当前服务器时,SQL Server 支持三部分命名约定。 ISO 标准也支持三部分命名约定。 但是,两种命名约定中使用的名称并不相同。 信息架构视图是在名为 INFORMATION_SCHEMA 的特殊架构中定义的。 此架构包含在每个数据库中。 每个信息架构视图包含特定数据库中存储的所有数据对象的元数据。
  下表显示了 SQL Server 名称和 SQL 标准名称之间的关系。
  SQL Server 名称
  对应的 SQL 标准等价名称
  数据库
  目录
  架构
  架构
  Object
  Object
  用户定义数据类型
  域
  引用信息架构视图时,必须使用包含 INFORMATION_SCHEMA 架构名称的限定名。
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT  
FROM AdventureWorks2014.INFORMATION_SCHEMA.COLUMNS
  
WHERE TABLE_NAME = N'Product';
  
GO
  https://msdn.microsoft.com/zh-cn/library/ms186778.aspx
  INFORMATION_SCHEMA.ROUTINES
  为当前数据库中可由当前用户访问的每个存储过程及函数返回一行。 描述返回值的列只适用于函数。 对于存储过程,这些列将为 NULL。
  若要从这些视图中检索信息,请指定 INFORMATION_SCHEMA.view_name 的完全限定名称。
  ROUTINE_DEFINITION
  nvarchar(4000)
  列包含创建函数或存储过程的源语句。 这些源语句有可能包含嵌入式回车符。 如果将此列返回给某个以文本格式显示结果的应用程序,则 ROUTINE_DEFINITION 结果中的嵌入式回车符可能会影响整个结果集的格式。 如果选择 ROUTINE_DEFINITION 列,则必须对嵌入式回车符进行调整,例如,可将结果集返回到一个网格中或者将 ROUTINE_DEFINITION 返回到其自己的文本框中。
  如果函数或存储过程未加密,返回函数或存储过程的定义文本最前面的 4000 字符。 否则,返回 NULL。
  若要确保获得完整定义,请查询 OBJECT_DEFINITION 函数或 sys.sql_modules 目录视图中的 definition 列。
SELECT  
SPECIFIC_CATALOG,SPECIFIC_SCHEMA,SPECIFIC_NAME,ROUTINE_TYPE
  
FROM INFORMATION_SCHEMA.ROUTINES
  
WHERE ROUTINE_DEFINITION LIKE '%yourText%';
  https://msdn.microsoft.com/zh-cn/library/ms188757.aspx
  引用自《SQL Server 2012 Internals》
  “
  Information schema views
  Information schema views, introduced in SQL Server 7.0, were the original system table-independent view of the SQL Server metadata. The information schema views included in SQL Server 2012 comply with the SQL-92 standard, and all these views are in a schema called INFORMATION_SCHEMA. Some information available through the catalog views is available through the information schema views, and if you need to write a portable application that accesses the metadata, you should consider using these objects. However, the information schema views show only objects compatible with the SQL-92 standard. This means no information schema view exists for certain features, such as indexes, which aren’t defned in the standard. (Indexes are an implementation detail.) If your code doesn’t need to
  be strictly portable, or if you need metadata about nonstandard features such as indexes, flegroups, the CLR, and SQL Server Service Broker, using the Microsoft-supplied catalog views is suggested. Most examples in the documentation, as well as in this and other reference books, are based on the catalog view interface.
  ”
  MySQL中的 INFORMATION_SCHEMA Tables
  INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges. Other terms that are sometimes used for this information are data dictionary and system catalog.
  http://dev.mysql.com/doc/refman/5.7/en/information-schema.html



运维网声明 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-622193-1-1.html 上篇帖子: 如何将sql server数据库转化成sqlite数据库 下篇帖子: SQL SERVER 2008 创建,删除,添加表的主键
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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