如何简单的创建一个加密存储过程:
为了演示,现在我们创建一个具备各种参数类型的存储过程作为测试:
这个存储过程具备了输入参数,输出参数,返回值。
(关于返回值的题外话:返回值只能是 int 类型或者没有。默认情况下,系统存储过程都返回 0 表示调用成功,其他非零值表示失败。用户自定义的存储过程可以返回任意整数值)
现在调用一下这个存储过程试试:
再来看一下这个存储过程的注释:
可以发现是一些加密了之后的乱码。
如何得到加密存储过程的参数列表信息呢?有两个办法:
方法A:
这个方法返回的结果集里没有包含返回值的信息。
方法B:
这个语句返回的比上面那个多一行返回值信息。
注意到他们返回的其他列信息也不同。比如 PROCEDURE_NAME(存储过程名),方法B返回的是:
Test;1
后面这个 1 表示 Group Number.
参考:
http://sqljunkies.com/WebLog/roman/archive/2004/10/08/4539.aspx
create
proc
Test
(参数列表)
with encription
as
主体
go
(参数列表)
with encription
as
主体
go
为了演示,现在我们创建一个具备各种参数类型的存储过程作为测试:
create
proc
Test
(
@x int = 3 ,
@s nvarchar ( 20 ),
@y int output
)
with encryption
as
select @x, @s
set @y = 5
return 1
go
(
@x int = 3 ,
@s nvarchar ( 20 ),
@y int output
)
with encryption
as
select @x, @s
set @y = 5
return 1
go
(关于返回值的题外话:返回值只能是 int 类型或者没有。默认情况下,系统存储过程都返回 0 表示调用成功,其他非零值表示失败。用户自定义的存储过程可以返回任意整数值)
现在调用一下这个存储过程试试:
declare
@y
int
, @r
int
exec @r = test 9 , ' Hello ' , @y output
select @y
select @r
exec @r = test 9 , ' Hello ' , @y output
select @y
select @r
再来看一下这个存储过程的注释:
SELECT
c.id, c.
text
FROM syscomments c INNER JOIN sysobjects o
ON c.id = o.id
WHERE o.name = ' Test '
FROM syscomments c INNER JOIN sysobjects o
ON c.id = o.id
WHERE o.name = ' Test '
如何得到加密存储过程的参数列表信息呢?有两个办法:
方法A:
select
*
from
information_schema.parameters
where specific_name = ' Test '
where specific_name = ' Test '
方法B:
sp_procedure_params_rowset
'
Test
'
,
1
,
'
dbo
'
注意到他们返回的其他列信息也不同。比如 PROCEDURE_NAME(存储过程名),方法B返回的是:
Test;1
后面这个 1 表示 Group Number.
参考:
http://sqljunkies.com/WebLog/roman/archive/2004/10/08/4539.aspx