pb中调用ms sqlserver的存储过程的问题
我自己重载了 transaction类在这个继承类中的 local external function 中
添加了一个 存储结构(这个SP是我自己开发的)
我在一个不可视对象中调用它时,它返回的数据不正确。
我用的数据库是 ms sqlserver 7.0
这个存储过程是:(见下面)
我在 isqlw 中运行它很好,结果值都正确
但在PB中调用它就有问题。比如一个LOGINNAME 实际上是“CCENTER”但返回的是 "C"
百思不得起解。
////////////////////////////////////////////////////////////////////////
CREATE PROCEDURE sp_cc_UserInfo
@name_in_db sysname = NULL --User,Group,Alias
,@GroupName sysname output
,@LoginName sysname output
,@defDbName sysname output
,@UserId smallint output
,@SUserId smallInt output
AS
Set nocount on
Set ansi_warnings off
Declare
@RetCode int
,@_rowcount int
/*
Declare
@Name1Type char(2)
,@CMaxUsUID smallint
*/
----------------------- create holding table --------------------
/*Create temp table before any DML to ensure dynamic*/
Create Table #tb1_uga
(
zUserName sysname Null
,zGroupName sysname Null
,zLoginName sysname Null
,zDefDBName sysname Null
,zUID smallint Null
,zSUID smallint Null
)
--------
Select
@RetCode = 0
-----------------------------------
---- 如果用户名为空,返回 10
if (@name_in_db is null )
begin
return 10
end
------------------------------------
---- 取得用户信息
INSERT into #tb1_uga
(
zUserName
,zGroupName
,zLoginName
,zDefDBName
,zUID
,zSUID
)
SELECT
usu.name
,case
when (usg.uid is null) then 'public'
else usg.name
end
,lo.loginname
,lo.dbname
,usu.uid
,suser_id(suser_sname(usu.sid))
from
sysusers usu left outer join
(sysmembers mem inner join sysusers usg on mem.groupuid = usg.uid) on usu.uid = mem.memberuid
left outer join master.dbo.syslogins lo on usu.sid = lo.sid
where
(usu.islogin = 1 and usu.isaliased = 0 and usu.hasdbaccess = 1) and
(usg.issqlrole = 1 or usg.uid is null) and
usu.name = @name_in_db
----------------------------
-- 如果用户不存在返回 20
Select @_rowcount = @@rowcount
if (@_rowcount = 0 )
begin
return 20
end
------------------------------------
-- 用户可能在几个组
-- 取出它所在程序有效组的信息
SELECT
@GroupName = zGroupName,
@LoginName = zLoginName,
@DefDBName = zDefDBName,
@UserID = zUID ,
@SUserID = zSUID
from
#tb1_uga
where zGroupName like "cc_%" -- 取得用户所在的组,是程序给定的组项,标志是 "cc_"前缀
-------------------------------------
--- 如果没有这个有效值
--- 返回 30 表示用户不在程序所在的
--- 有效组范围内。
if (@GroupName is null)
return 30
----------------------- Finalization ----------------------
IF (object_id('tempdb..#tb1_uga') IS not Null)
Drop Table #tb1_uga
return (0) -- sp_cc_UserInfo