delphi调用sqlserver2000自定义函数时出现的有关问题(疑与中文字符有关)
delphi调用sqlserver2000自定义函数时出现的问题(疑与中文字符有关)
go
create function [dbo].[m_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
----该函数引用自maco_wang 字符分割字符串
引用示例:
在delphi 中调 dbo.m_split 时
with DataModule1.temp do
begin
close;sql.Clear;
sql.Add('select * from dbo.m_split(:a,:b)');
Parameters.ParamByName('a').Value:=str;
Parameters.ParamByName('b').Value:='/';
open;
end;
当给str赋值str:='优秀/及格/基本/不及格';得到的结果却是:
优秀
及格
基
当给str赋值str:='aaaa12345/bbbb12345/cccc123456/dddd12345'得到的结果为:
aaaa12345
bbbb12345
cccc123456
dddd12345
问题:为何在delphi中给string变量str赋值中文字符串结果不对,赋值英文字符串结果正确
(注:该自定义函数在sqlserver2000查询分析器中运行均正确)
求解?
------解决方案--------------------
不用参数形式,用变量
sql.Add('select * from dbo.m_split('''+str+''',''/'')');
go
create function [dbo].[m_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
----该函数引用自maco_wang 字符分割字符串
引用示例:
在delphi 中调 dbo.m_split 时
with DataModule1.temp do
begin
close;sql.Clear;
sql.Add('select * from dbo.m_split(:a,:b)');
Parameters.ParamByName('a').Value:=str;
Parameters.ParamByName('b').Value:='/';
open;
end;
当给str赋值str:='优秀/及格/基本/不及格';得到的结果却是:
优秀
及格
基
当给str赋值str:='aaaa12345/bbbb12345/cccc123456/dddd12345'得到的结果为:
aaaa12345
bbbb12345
cccc123456
dddd12345
问题:为何在delphi中给string变量str赋值中文字符串结果不对,赋值英文字符串结果正确
(注:该自定义函数在sqlserver2000查询分析器中运行均正确)
求解?
------解决方案--------------------
不用参数形式,用变量
sql.Add('select * from dbo.m_split('''+str+''',''/'')');