如何查看在SQL Server 2008 R2中无法修改的存储过程的定义?

7

我正在尝试查看存储在运行于SQL Server 2008 R2的数据库中的存储过程。我已经在[dbName] > Programmability > Stored Procedures > dbo.[sprocName]下找到了存储过程,但它旁边有一个小挂锁图标,当我右键单击它以修改它时,修改选项是灰色的。

然后我尝试通过查询数据库中的对象来访问定义,像这样:

use [dbName];
select * from sys.sql_modules
where definition LIKE '%[sprocName]%'

这不会提供所需存储过程的定义,但对于我已经可以修改的存储过程,该查询确实有效。

如何在不获取修改权限的情况下查看此存储过程的定义?

更新

根据此错误消息,似乎Sproc实际上是加密的:

TITLE: Microsoft SQL Server Management Studio
------------------------------

Script failed for StoredProcedure 'dbo.[sprocName]'.  (Microsoft.SqlServer.Smo)

------------------------------
ADDITIONAL INFORMATION:

Property TextHeader is not available for StoredProcedure '[dbo].[sprocName]'. This property may not exist for this object, or may not be retrievable due to insufficient access rights.  
    The text is encrypted. (Microsoft.SqlServer.Smo)

可能是SQL 2005中带有挂锁图标的存储过程是什么?的重复问题。 - Martin Smith
1
请尝试访问此链接:http://msdn.microsoft.com/en-us/library/ms345443.aspx。 - liebs19
@MartinSmith - 虽然我承认你指定的问题中有相关信息,但我的问题与该用户的问题不同。 - quakkels
@quakkels - 是的抱歉,我同意。在SQL Server中查看定义而不获取修改权限,您将需要被授予VIEW DEFINITION权限。 - Martin Smith
在尝试了@liebs19发布的链接中的一些解决方案后,我可以确认Sproc是加密的,这是根据我收到的错误消息确定的。 - quakkels
尝试使用以下方法进行解密:http://stackoverflow.com/questions/5443032/how-do-i-transfer-encrypted-stored-procedures-from-online-db-to-local - liebs19
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接