获取创建SQL Server对象的定义文本

引用自《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

时间: 2024-10-12 10:42:24

获取创建SQL Server对象的定义文本的相关文章

简单的如何创建sql server存储过程

学习sql server数据库,sql server存储过程的建立方法是一定要知道的,下面将教您如何建立sql server存储过程,希望对您有所帮助. 在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例. 展开“数据库”.sql server存储过程所属的数据库以及“可编程性”. 右键单击“存储过程”,再单击“新建存储过程”. 在“查询”菜单上,单击“指定模板参数的值”. 在“指定模板参数的值”对话框中,“值”列包含参数的建议值.接受这些值或将其替换为新值,再单击“确定”. 在查询编辑

[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin  update  某个sqlserver的表@dblink名字 .....;  update 某个oracle的表...;end; 这段pl/sql执行会报错:错误信息是:-----------------------------------------------------------------执行失败:ORA-02054: 事务处理 2.12.27634 有问题

用Excel创建SQL server性能报告

转载自Kun Lee "Creating SQL Server performance based reports using Excel" 性能测试调优中对数据库的监控十分重要,使用Excel方便地生成report对我们的工作效率提高也很重要.本文用到的Excel数据在另一篇博文"怎样获取Windows平台下SQL server的性能计数器值"里有详细描写.或者进到本文中给出的博客链接"Setting up Performance Monitor to

SQL Server 查看表定义的 2 种方法

方法 1. 用SQL Server Management Studio 第一步找到要查看的表,右键 第二步点设计 方法 2. sp_help @objname = 'tableName' execute sp_help @objname = 'Nums';

Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”

从Excel导入数据到Sql server 时,由于表中的数据有的很长,导入时出现如下错误(如果数据不是很长,255内以内,则不会出现错误): 出错原因: SQL Server的导入导出为了确定数据表的每个字段类型,取excel表的每个字段的前几行(3行即可)来判别.如果前3条是少于255的字符串,则设成nvarchar(255)类型,所以,当如果第四条或更后的数据的字符数大于255,则会报错. 解决方法: 在导入数据前,可以手动加几条无关的数据,让字段的字符数大于255,则导入时SQL Ser

sql server 对象资源管理器(一)

当需要查看具体数据库的所有用户表.存储过程等创建修改等脚本的时候,可以借用视图中的对象资源管理器的详细信息里面获取. 具体操作如下图所示:

SQL Server 对象

第一项:重命名对象 execute sp_rename @objname='Nums',@newname ='Numbers',@objtype ='object'; go 这里要特别小心   @newname 这个参数不要带架构  如 :@newname ='dbo.Numbers' 这下就不好了,表的新表名就会是 dbo.dbo.Numbers; 所有对于 sp_rename 这种语句不要带架构. 第二项: 对象转移架构. 把Numbers 表从dbo  转移到 NiNi alter she

SQL SERVER 数据库中查看文本字段中的数据长度LEN() 函数的使用方法

SQL LEN() 语法 SELECT LEN(column_name) FROM table_name Id LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing 现在,我们希望取得 "City" 列中值的长度. 我们使用如下 SQL 语句: SELECT L

批量删除Sql Server对象(表,存储过程,触发器)

先在系统表中找到要处理的表名或者是存储过程的名字,在用游标对其进行处理 PS:SqlServer 2000使用的是系统表是sysobjects,类型字段是:xtype; SqlServer 2005以上版本的系统表是Sys.Objects,类型字段是Type 本文中以Sql2005为例,Sql2000版本请自行按照上述说明进行替换 注意  sys.objects 中type的值不同 删除命令是不同的 如删除存储过程用drop PROCEDURE PROCEDURENAME 删除表用 drop t