有一Delphi函数,要转到Sql server中, 应怎样写? 急!!(200分)

  • 主题发起人 主题发起人 张丽敏
  • 开始时间 开始时间

张丽敏

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi中有一函数:Encrypt()
function Encrypt(const S: String; Key: Word): String;
var
I: Integer;
begin
Result := S;
for I := 1 to Length(S) do begin
Result := char(byte(S) xor 2);
end;

要将Encrypt()转到Sql server中,
SQL 应怎样写?
谢谢!!
 
可惜我看不懂delphi
 
把该函数封装到DLL中,加上CDECL调用约式;
输出该函数;
在SQL SERVER中的MASTER数据库上选择外部存储过程,加上一个新的,名字
就是你的函数名,然后把下面的路径指向你编译出来的DLL即可。

 
我的函授中多了一个begin
for I := 1 to Length(S) do begin
应该是: ~~~~~
for I := 1 to Length(S) do

Fenix的方法很好, 我想直接在SQL的"用户定义函数"里写此Encrypt()的函数.
这样更容易修改, 但我的SQL刚学, 写不出来,在SQL我没有看到过 xor 的逻辑运算符,
用其他也可以.
请各位帮忙!!
 
xor可以用
not or and 的关系表达出来呀。
 
XOR用^表示
SELECT (3^5)
 
SELECT ASCII(SUBSTRING('ABC',1,1))^2
 
mataijin:
谢谢你告诉我"^(按位互斥 OR)"的运算符.
你能帮我写这个函数吗? 我写的达不到效果. ASCII对中文好象得到是空值.
如:Select char(ASCII('汉')) 的结果是空的.
谢谢!!

 
Select NCHAR(UNICODE('张丽敏'))
 
我用的SQL SERVER 7不支持USER DIFINE FUNCTION
所以我也不知道怎么写,我想问题的难点已经没有了吧
 
mataijin:
能不能帮我检查是那里出错?

DECLARE @posi int,
@sours nchar(50),
@t1 nchar(1),
@ret nchar(50)
SET @posi = 1
SET @sours = '123456'
WHILE @posi <= DATALENGTH(@sours) BEGIN
set @t1 = (select NCHAR(UNICODE(substring(@sours,@posi,1)) ^8))
if @posi = 1 set @ret = @t1
else set @ret = @ret + @t1
set @posi = @posi + 1
END
select @ret

它得不到结果, 可能问题出在@ret = @ret + @t1,
不知应怎样才能相加起来?
谢谢!!
 
我改了你两个定义。
@t1 nvarchar(100),
@ret nvarchar(50)

试试下面这段代码:(或许能解决你的问题)
DECLARE @posi int,
@sours nchar(50),
@t1 nvarchar(100),
@ret nvarchar(50)
set @ret=""
SET @posi = 1
SET @sours = '123456'
WHILE @posi <= DATALENGTH(@sours) BEGIN
set @t1 = (select NCHAR(UNICODE(substring(@sours,@posi,1)) ^8))
print @ret
--print @t1
print "------"

if @posi = 1
begin
set @ret = @t1
--print @ret
end
else set @ret = @ret + @t1
begin
set @posi = @posi + 1
-- print @ret
end
END
--print @ret

 
多人接受答案了。
 
DECLARE @posi int,
@sours nvarchar(50),
@t1 nvarchar,
@ret nvarchar(50)
SET @posi = 1
SET @sours = '1234山豆'
Set @ret=''
WHILE @posi <= len(@sours) BEGIN
set @t1 = (select nchar(unicode(substring(@sours,@posi,1))^8))
set @ret = @ret+@t1
set @posi = @posi + 1
END
select @ret
 
mataijin:
谢谢你!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
591
import
I
后退
顶部