我创建了一个创建文件夹的简单CLR程序。问题是每次我使用“CREATE PROCEDURE ...”语句在SQL Server中创建过程时,该过程都会自动加密。我没有使用WITH ENCRYPTION子句,我也知道它不能用于CLR对象,所以我在这里很困惑。 这是我的代码:
CREATE PROCEDURE CreateFolder(@Path nvarchar(500), @FolderName nvarchar(50), @ReturnCode int output, @ReturnMessage nvarchar(500) output )
WITH EXECUTE AS OWNER
AS
EXTERNAL NAME MyLibrary.[MyLibrary.StoredProcedures].CreateFolder
GO
我正在使用SQL Server 2008 R2工作组版。
非常感谢任何帮助。
谢谢。
答案 0 :(得分:2)
是否只是将其显示为已加密,因为您无法在Management Studio中看到它的代码?您无法编写脚本或其他任何内容,这可能就是原因。
答案 1 :(得分:1)
SQLCLR对象未加密。事实上,正如问题中所述,WITH ENCRYPTION
选项甚至不适用于SQLCLR对象。它们在SSMS中显示为加密的原因不是由于无法看到它们的定义,而是因为它们甚至没有首先定义。如果查看sys.sql_modules
,您可以看到存储过程,函数,触发器,视图等的定义。但它们都不是SQLCLR对象。此外,如果您查看sys.parameters目录视图,则会有一个名为has_default_value
的字段,并且根据该链接的MSDN页面:
SQL Server仅在此目录视图中维护CLR对象的默认值;因此,对于Transact-SQL对象,此列的值为0。要查看Transact-SQL对象中参数的默认值,请查询sys.sql_modules目录视图的 definition 列,或使用OBJECT_DEFINITION系统函数。
每次请求时,都会从元数据生成SQLCLR对象的CREATE
语句(如问题中所示)。