破解SQL2000的存储过程的存储过程
SET
ANSI_NULLS
ON
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [ sp_decrypt ] ( @objectName varchar ( 50 ))
AS
BEGIN
SET nocount ON
-- CSDN:j9988 copyright:2004.04.15
-- V3.1
-- 破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
-- 修正上一版视图触发器不能正确解密错误
-- 发现有错,请E_MAIL:[email protected]
BEGIN TRAN
DECLARE @objectname1 varchar ( 100 ), @orgvarbin varbinary ( 8000 )
DECLARE @sql1 nvarchar ( 4000 ), @sql2 varchar ( 8000 ), @sql3 nvarchar ( 4000 ), @sql4 nvarchar ( 4000 )
DECLARE @OrigSpText1 nvarchar ( 4000 ), @OrigSpText2 nvarchar ( 4000 ) , @OrigSpText3 nvarchar ( 4000 ), @resultsp nvarchar ( 4000 )
DECLARE @i int , @status int , @type varchar ( 10 ), @parentid int
DECLARE @colid int , @n int , @q int , @j int , @k int , @encrypted int , @number int
SELECT @type = xtype, @parentid = parent_obj FROM sysobjects where id = object_id ( @ObjectName )
CREATE TABLE # temp ( number int ,colid int ,ctext varbinary ( 8000 ),encrypted int ,status int )
INSERT # temp SELECT number ,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id ( @objectName )
SELECT @number = max ( number ) FROM # temp
SET @k = 0
WHILE @k <= @number
BEGIN
IF EXISTS ( SELECT 1 FROM syscomments WHERE id = object_id ( @objectname ) AND number = @k )
BEGIN
IF @type = ' P '
SET @sql1 = ( CASE WHEN @number > 1 THEN ' ALTER PROCEDURE ' + @objectName + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
ELSE ' ALTER PROCEDURE ' + @objectName + ' WITH ENCRYPTION AS '
END )
IF @type = ' TR '
begin
declare @parent_obj varchar ( 255 ), @tr_parent_xtype varchar ( 10 )
select @parent_obj = parent_obj from sysobjects where id = object_id ( @objectName )
select @tr_parent_xtype = xtype from sysobjects where id = @parent_obj
if @tr_parent_xtype = ' V '
begin
set @sql1 = ' ALTER TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 '
end
else
begin
set @sql1 = ' ALTER TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end
end
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
set @sql1 = ( case @type when ' TF ' then
' ALTER FUNCTION ' + @objectName + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' ALTER FUNCTION ' + @objectName + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' ALTER FUNCTION ' + @objectName + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' V '
set @sql1 = ' ALTER VIEW ' + @objectname + ' WITH ENCRYPTION AS SELECT 1 as f '
set @q = len ( @sql1 )
set @sql1 = @sql1 + REPLICATE ( ' - ' , 4000 - @q )
select @sql2 = REPLICATE ( ' - ' , 8000 )
set @sql3 = ' exec(@sql1 '
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= CEILING ( 1.0 * ( @colid - 1 ) / 2 ) and len ( @sQL3 ) <= 3996
begin
set @sql3 = @sql3 + ' +@ '
set @n = @n + 1
end
set @sql3 = @sql3 + ' ) '
exec sp_executesql @sql3 ,N ' @Sql1 nvarchar(4000),@ varchar(8000) ' , @sql1 = @sql1 ,@ = @sql2
end
set @k = @k + 1
end
set @k = 0
while @k <= @number
begin
if exists ( select 1 from syscomments where id = object_id ( @objectname ) and number = @k )
begin
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= @colid
begin
select @OrigSpText1 = ctext, @encrypted = encrypted, @status = status FROM # temp WHERE colid = @n and number = @k
SET @OrigSpText3 = ( SELECT ctext FROM syscomments WHERE id = object_id ( @objectName ) and colid = @n and number = @k )
if @n = 1
begin
if @type = ' P '
SET @OrigSpText2 = ( case when @number > 1 then ' CREATE PROCEDURE ' + @objectName + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
else ' CREATE PROCEDURE ' + @objectName + ' WITH ENCRYPTION AS '
end )
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
SET @OrigSpText2 = ( case @type when ' TF ' then
' CREATE FUNCTION ' + @objectName + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' CREATE FUNCTION ' + @objectName + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' CREATE FUNCTION ' + @objectName + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' TR '
begin
if @tr_parent_xtype = ' V '
begin
set @OrigSpText2 = ' CREATE TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 '
end
else
begin
set @OrigSpText2 = ' CREATE TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end
end
if @type = ' V '
set @OrigSpText2 = ' CREATE VIEW ' + @objectname + ' WITH ENCRYPTION AS SELECT 1 as f '
set @q = 4000 - len ( @OrigSpText2 )
set @OrigSpText2 = @OrigSpText2 + REPLICATE ( ' - ' , @q )
end
else
begin
SET @OrigSpText2 = REPLICATE ( ' - ' , 4000 )
end
SET @i = 1
SET @resultsp = replicate (N ' A ' , ( datalength ( @OrigSpText1 ) / 2 ))
WHILE @i <= datalength ( @OrigSpText1 ) / 2
BEGIN
SET @resultsp = stuff ( @resultsp , @i , 1 , NCHAR ( UNICODE ( substring ( @OrigSpText1 , @i , 1 )) ^
( UNICODE ( substring ( @OrigSpText2 , @i , 1 )) ^
UNICODE ( substring ( @OrigSpText3 , @i , 1 )))))
SET @i = @i + 1
END
SET @orgvarbin = cast ( @OrigSpText1 as varbinary ( 8000 ))
SET @resultsp = ( CASE WHEN @encrypted = 1
then @resultsp
else convert ( nvarchar ( 4000 ), CASE WHEN @status & 2 = 2 THEN uncompress( @orgvarbin ) ELSE @orgvarbin END )
end )
PRINT @resultsp
SET @n = @n + 1
END
END
SET @k = @k + 1
END
DROP TABLE # temp
ROLLBACK TRAN
END
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [ sp_decrypt ] ( @objectName varchar ( 50 ))
AS
BEGIN
SET nocount ON
-- CSDN:j9988 copyright:2004.04.15
-- V3.1
-- 破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
-- 修正上一版视图触发器不能正确解密错误
-- 发现有错,请E_MAIL:[email protected]
BEGIN TRAN
DECLARE @objectname1 varchar ( 100 ), @orgvarbin varbinary ( 8000 )
DECLARE @sql1 nvarchar ( 4000 ), @sql2 varchar ( 8000 ), @sql3 nvarchar ( 4000 ), @sql4 nvarchar ( 4000 )
DECLARE @OrigSpText1 nvarchar ( 4000 ), @OrigSpText2 nvarchar ( 4000 ) , @OrigSpText3 nvarchar ( 4000 ), @resultsp nvarchar ( 4000 )
DECLARE @i int , @status int , @type varchar ( 10 ), @parentid int
DECLARE @colid int , @n int , @q int , @j int , @k int , @encrypted int , @number int
SELECT @type = xtype, @parentid = parent_obj FROM sysobjects where id = object_id ( @ObjectName )
CREATE TABLE # temp ( number int ,colid int ,ctext varbinary ( 8000 ),encrypted int ,status int )
INSERT # temp SELECT number ,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id ( @objectName )
SELECT @number = max ( number ) FROM # temp
SET @k = 0
WHILE @k <= @number
BEGIN
IF EXISTS ( SELECT 1 FROM syscomments WHERE id = object_id ( @objectname ) AND number = @k )
BEGIN
IF @type = ' P '
SET @sql1 = ( CASE WHEN @number > 1 THEN ' ALTER PROCEDURE ' + @objectName + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
ELSE ' ALTER PROCEDURE ' + @objectName + ' WITH ENCRYPTION AS '
END )
IF @type = ' TR '
begin
declare @parent_obj varchar ( 255 ), @tr_parent_xtype varchar ( 10 )
select @parent_obj = parent_obj from sysobjects where id = object_id ( @objectName )
select @tr_parent_xtype = xtype from sysobjects where id = @parent_obj
if @tr_parent_xtype = ' V '
begin
set @sql1 = ' ALTER TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 '
end
else
begin
set @sql1 = ' ALTER TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end
end
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
set @sql1 = ( case @type when ' TF ' then
' ALTER FUNCTION ' + @objectName + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' ALTER FUNCTION ' + @objectName + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' ALTER FUNCTION ' + @objectName + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' V '
set @sql1 = ' ALTER VIEW ' + @objectname + ' WITH ENCRYPTION AS SELECT 1 as f '
set @q = len ( @sql1 )
set @sql1 = @sql1 + REPLICATE ( ' - ' , 4000 - @q )
select @sql2 = REPLICATE ( ' - ' , 8000 )
set @sql3 = ' exec(@sql1 '
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= CEILING ( 1.0 * ( @colid - 1 ) / 2 ) and len ( @sQL3 ) <= 3996
begin
set @sql3 = @sql3 + ' +@ '
set @n = @n + 1
end
set @sql3 = @sql3 + ' ) '
exec sp_executesql @sql3 ,N ' @Sql1 nvarchar(4000),@ varchar(8000) ' , @sql1 = @sql1 ,@ = @sql2
end
set @k = @k + 1
end
set @k = 0
while @k <= @number
begin
if exists ( select 1 from syscomments where id = object_id ( @objectname ) and number = @k )
begin
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= @colid
begin
select @OrigSpText1 = ctext, @encrypted = encrypted, @status = status FROM # temp WHERE colid = @n and number = @k
SET @OrigSpText3 = ( SELECT ctext FROM syscomments WHERE id = object_id ( @objectName ) and colid = @n and number = @k )
if @n = 1
begin
if @type = ' P '
SET @OrigSpText2 = ( case when @number > 1 then ' CREATE PROCEDURE ' + @objectName + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
else ' CREATE PROCEDURE ' + @objectName + ' WITH ENCRYPTION AS '
end )
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
SET @OrigSpText2 = ( case @type when ' TF ' then
' CREATE FUNCTION ' + @objectName + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' CREATE FUNCTION ' + @objectName + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' CREATE FUNCTION ' + @objectName + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' TR '
begin
if @tr_parent_xtype = ' V '
begin
set @OrigSpText2 = ' CREATE TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 '
end
else
begin
set @OrigSpText2 = ' CREATE TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end
end
if @type = ' V '
set @OrigSpText2 = ' CREATE VIEW ' + @objectname + ' WITH ENCRYPTION AS SELECT 1 as f '
set @q = 4000 - len ( @OrigSpText2 )
set @OrigSpText2 = @OrigSpText2 + REPLICATE ( ' - ' , @q )
end
else
begin
SET @OrigSpText2 = REPLICATE ( ' - ' , 4000 )
end
SET @i = 1
SET @resultsp = replicate (N ' A ' , ( datalength ( @OrigSpText1 ) / 2 ))
WHILE @i <= datalength ( @OrigSpText1 ) / 2
BEGIN
SET @resultsp = stuff ( @resultsp , @i , 1 , NCHAR ( UNICODE ( substring ( @OrigSpText1 , @i , 1 )) ^
( UNICODE ( substring ( @OrigSpText2 , @i , 1 )) ^
UNICODE ( substring ( @OrigSpText3 , @i , 1 )))))
SET @i = @i + 1
END
SET @orgvarbin = cast ( @OrigSpText1 as varbinary ( 8000 ))
SET @resultsp = ( CASE WHEN @encrypted = 1
then @resultsp
else convert ( nvarchar ( 4000 ), CASE WHEN @status & 2 = 2 THEN uncompress( @orgvarbin ) ELSE @orgvarbin END )
end )
PRINT @resultsp
SET @n = @n + 1
END
END
SET @k = @k + 1
END
DROP TABLE # temp
ROLLBACK TRAN
END
create
PROCEDURE
sp_decrypt(
@objectname
varchar
(
50
))
AS
begin
set nocount on
-- CSDN:j9988 copyright:2004.07.15
-- V3.2
-- 破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
-- 修正上一版"视图触发器"不能正确解密错误
-- 发现有错,请E_MAIL:[email protected]
begin tran
declare @objectname1 varchar ( 100 ), @orgvarbin varbinary ( 8000 )
declare @sql1 nvarchar ( 4000 ), @sql2 varchar ( 8000 ), @sql3 nvarchar ( 4000 ), @sql4 nvarchar ( 4000 )
DECLARE @OrigSpText1 nvarchar ( 4000 ), @OrigSpText2 nvarchar ( 4000 ) , @OrigSpText3 nvarchar ( 4000 ), @resultsp nvarchar ( 4000 )
declare @i int , @status int , @type varchar ( 10 ), @parentid int
declare @colid int , @n int , @q int , @j int , @k int , @encrypted int , @number int
select @type = xtype, @parentid = parent_obj from sysobjects where id = object_id ( @objectname )
create table # temp ( number int ,colid int ,ctext varbinary ( 8000 ),encrypted int ,status int )
insert # temp Select number ,colid,ctext,encrypted,status FROM syscomments Where id = object_id ( @objectname )
select @number = max ( number ) from # temp
set @k = 0
while @k <= @number
begin
if exists ( select 1 from syscomments where id = object_id ( @objectname ) and number = @k )
begin
if @type = ' P '
set @sql1 = ( case when @number > 1 then ' Alter PROCEDURE ' + @objectname + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
else ' Alter PROCEDURE ' + @objectname + ' WITH ENCRYPTION AS '
end )
if @type = ' TR '
begin
declare @parent_obj varchar ( 255 ), @tr_parent_xtype varchar ( 10 )
select @parent_obj = parent_obj from sysobjects where id = object_id ( @objectname )
select @tr_parent_xtype = xtype from sysobjects where id = @parent_obj
if @tr_parent_xtype = ' V '
begin
set @sql1 = ' Alter TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTERD OF Insert AS PRINT 1 '
end
else
begin
set @sql1 = ' Alter TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR Insert AS PRINT 1 '
end
end
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
set @sql1 = ( case @type when ' TF ' then
' Alter FUNCTION ' + @objectname + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' Alter FUNCTION ' + @objectname + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' Alter FUNCTION ' + @objectname + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' V '
set @sql1 = ' Alter VIEW ' + @objectname + ' WITH ENCRYPTION AS Select 1 as f '
set @q = len ( @sql1 )
set @sql1 = @sql1 + REPLICATE ( ' - ' , 4000 - @q )
select @sql2 = REPLICATE ( ' - ' , 8000 )
set @sql3 = ' exec(@sql1 '
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= CEILING ( 1.0 * ( @colid - 1 ) / 2 ) and len ( @sql3 ) <= 3996
begin
set @sql3 = @sql3 + ' +@ '
set @n = @n + 1
end
set @sql3 = @sql3 + ' ) '
exec sp_executesql @sql3 ,N ' @sql1 nvarchar(4000),@ varchar(8000) ' , @sql1 = @sql1 ,@ = @sql2
end
set @k = @k + 1
end
set @k = 0
while @k <= @number
begin
if exists ( select 1 from syscomments where id = object_id ( @objectname ) and number = @k )
begin
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= @colid
begin
select @OrigSpText1 = ctext, @encrypted = encrypted, @status = status FROM # temp Where colid = @n and number = @k
SET @OrigSpText3 = ( Select ctext FROM syscomments Where id = object_id ( @objectname ) and colid = @n and number = @k )
if @n = 1
begin
if @type = ' P '
SET @OrigSpText2 = ( case when @number > 1 then ' Create PROCEDURE ' + @objectname + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
else ' Create PROCEDURE ' + @objectname + ' WITH ENCRYPTION AS '
end )
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
SET @OrigSpText2 = ( case @type when ' TF ' then
' Create FUNCTION ' + @objectname + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' Create FUNCTION ' + @objectname + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' Create FUNCTION ' + @objectname + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' TR '
begin
if @tr_parent_xtype = ' V '
begin
set @OrigSpText2 = ' Create TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTEAD OF Insert AS PRINT 1 '
end
else
begin
set @OrigSpText2 = ' Create TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR Insert AS PRINT 1 '
end
end
if @type = ' V '
set @OrigSpText2 = ' Create VIEW ' + @objectname + ' WITH ENCRYPTION AS Select 1 as f '
set @q = 4000 - len ( @OrigSpText2 )
set @OrigSpText2 = @OrigSpText2 + REPLICATE ( ' - ' , @q )
end
else
begin
SET @OrigSpText2 = REPLICATE ( ' - ' , 4000 )
end
SET @i = 1
SET @resultsp = replicate (N ' A ' , ( datalength ( @OrigSpText1 ) / 2 ))
WHILE @i <= datalength ( @OrigSpText1 ) / 2
BEGIN
SET @resultsp = stuff ( @resultsp , @i , 1 , NCHAR ( UNICODE ( substring ( @OrigSpText1 , @i , 1 )) ^
( UNICODE ( substring ( @OrigSpText2 , @i , 1 )) ^
UNICODE ( substring ( @OrigSpText3 , @i , 1 )))))
SET @i = @i + 1
END
set @orgvarbin = cast ( @OrigSpText1 as varbinary ( 8000 ))
set @resultsp = ( case when @encrypted = 1
then @resultsp
else convert ( nvarchar ( 4000 ), case when @status & 2 = 2 then uncompress( @orgvarbin ) else @orgvarbin end )
end )
print @resultsp
set @n = @n + 1
end
end
set @k = @k + 1
end
drop table # temp
rollback tran
end
AS
begin
set nocount on
-- CSDN:j9988 copyright:2004.07.15
-- V3.2
-- 破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
-- 修正上一版"视图触发器"不能正确解密错误
-- 发现有错,请E_MAIL:[email protected]
begin tran
declare @objectname1 varchar ( 100 ), @orgvarbin varbinary ( 8000 )
declare @sql1 nvarchar ( 4000 ), @sql2 varchar ( 8000 ), @sql3 nvarchar ( 4000 ), @sql4 nvarchar ( 4000 )
DECLARE @OrigSpText1 nvarchar ( 4000 ), @OrigSpText2 nvarchar ( 4000 ) , @OrigSpText3 nvarchar ( 4000 ), @resultsp nvarchar ( 4000 )
declare @i int , @status int , @type varchar ( 10 ), @parentid int
declare @colid int , @n int , @q int , @j int , @k int , @encrypted int , @number int
select @type = xtype, @parentid = parent_obj from sysobjects where id = object_id ( @objectname )
create table # temp ( number int ,colid int ,ctext varbinary ( 8000 ),encrypted int ,status int )
insert # temp Select number ,colid,ctext,encrypted,status FROM syscomments Where id = object_id ( @objectname )
select @number = max ( number ) from # temp
set @k = 0
while @k <= @number
begin
if exists ( select 1 from syscomments where id = object_id ( @objectname ) and number = @k )
begin
if @type = ' P '
set @sql1 = ( case when @number > 1 then ' Alter PROCEDURE ' + @objectname + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
else ' Alter PROCEDURE ' + @objectname + ' WITH ENCRYPTION AS '
end )
if @type = ' TR '
begin
declare @parent_obj varchar ( 255 ), @tr_parent_xtype varchar ( 10 )
select @parent_obj = parent_obj from sysobjects where id = object_id ( @objectname )
select @tr_parent_xtype = xtype from sysobjects where id = @parent_obj
if @tr_parent_xtype = ' V '
begin
set @sql1 = ' Alter TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTERD OF Insert AS PRINT 1 '
end
else
begin
set @sql1 = ' Alter TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR Insert AS PRINT 1 '
end
end
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
set @sql1 = ( case @type when ' TF ' then
' Alter FUNCTION ' + @objectname + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' Alter FUNCTION ' + @objectname + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' Alter FUNCTION ' + @objectname + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' V '
set @sql1 = ' Alter VIEW ' + @objectname + ' WITH ENCRYPTION AS Select 1 as f '
set @q = len ( @sql1 )
set @sql1 = @sql1 + REPLICATE ( ' - ' , 4000 - @q )
select @sql2 = REPLICATE ( ' - ' , 8000 )
set @sql3 = ' exec(@sql1 '
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= CEILING ( 1.0 * ( @colid - 1 ) / 2 ) and len ( @sql3 ) <= 3996
begin
set @sql3 = @sql3 + ' +@ '
set @n = @n + 1
end
set @sql3 = @sql3 + ' ) '
exec sp_executesql @sql3 ,N ' @sql1 nvarchar(4000),@ varchar(8000) ' , @sql1 = @sql1 ,@ = @sql2
end
set @k = @k + 1
end
set @k = 0
while @k <= @number
begin
if exists ( select 1 from syscomments where id = object_id ( @objectname ) and number = @k )
begin
select @colid = max (colid) from # temp where number = @k
set @n = 1
while @n <= @colid
begin
select @OrigSpText1 = ctext, @encrypted = encrypted, @status = status FROM # temp Where colid = @n and number = @k
SET @OrigSpText3 = ( Select ctext FROM syscomments Where id = object_id ( @objectname ) and colid = @n and number = @k )
if @n = 1
begin
if @type = ' P '
SET @OrigSpText2 = ( case when @number > 1 then ' Create PROCEDURE ' + @objectname + ' ; ' + rtrim ( @k ) + ' WITH ENCRYPTION AS '
else ' Create PROCEDURE ' + @objectname + ' WITH ENCRYPTION AS '
end )
if @type = ' FN ' or @type = ' TF ' or @type = ' IF '
SET @OrigSpText2 = ( case @type when ' TF ' then
' Create FUNCTION ' + @objectname + ' (@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when ' FN ' then
' Create FUNCTION ' + @objectname + ' (@a char(1)) returns char(1) with encryption as begin return @a end '
when ' IF ' then
' Create FUNCTION ' + @objectname + ' (@a char(1)) returns table with encryption as return select @a as a '
end )
if @type = ' TR '
begin
if @tr_parent_xtype = ' V '
begin
set @OrigSpText2 = ' Create TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION INSTEAD OF Insert AS PRINT 1 '
end
else
begin
set @OrigSpText2 = ' Create TRIGGER ' + @objectname + ' ON ' + OBJECT_NAME ( @parentid ) + ' WITH ENCRYPTION FOR Insert AS PRINT 1 '
end
end
if @type = ' V '
set @OrigSpText2 = ' Create VIEW ' + @objectname + ' WITH ENCRYPTION AS Select 1 as f '
set @q = 4000 - len ( @OrigSpText2 )
set @OrigSpText2 = @OrigSpText2 + REPLICATE ( ' - ' , @q )
end
else
begin
SET @OrigSpText2 = REPLICATE ( ' - ' , 4000 )
end
SET @i = 1
SET @resultsp = replicate (N ' A ' , ( datalength ( @OrigSpText1 ) / 2 ))
WHILE @i <= datalength ( @OrigSpText1 ) / 2
BEGIN
SET @resultsp = stuff ( @resultsp , @i , 1 , NCHAR ( UNICODE ( substring ( @OrigSpText1 , @i , 1 )) ^
( UNICODE ( substring ( @OrigSpText2 , @i , 1 )) ^
UNICODE ( substring ( @OrigSpText3 , @i , 1 )))))
SET @i = @i + 1
END
set @orgvarbin = cast ( @OrigSpText1 as varbinary ( 8000 ))
set @resultsp = ( case when @encrypted = 1
then @resultsp
else convert ( nvarchar ( 4000 ), case when @status & 2 = 2 then uncompress( @orgvarbin ) else @orgvarbin end )
end )
print @resultsp
set @n = @n + 1
end
end
set @k = @k + 1
end
drop table # temp
rollback tran
end