从另一个存储过程调用 Sybase 存储过程而不显示调用的存储过程结果
Calling a Sybase stored procedure from another stored procedure without displaying called stored procedure results
我正在从另一个存储过程 Y 调用 Sybase 存储过程 X。在 the answer to a similar question 之后,我创建了一个 #tmp_table 来保存存储过程 X 的结果。
create table #tmp_table(
col1 int,
col2 varchar(100),
...
) exec sp_stored_procedureX 888, 'Parameter2', ...
select * from #tmp_table
上面成功地将存储过程 X 的结果加载到 #tmp_table 中,但它显示了两次存储过程 X 的结果。我猜第一个来自“exec sp_stored_procedureX ...”部分,第二个来自“select * 来自#tmp_table”,这是我想要的。我不想显示第一个“exec sp_stored_procedureX ...”部分的结果。如何将数据存储到#tmp_table而不显示它?
如果需要更多 clarification/information,请告诉我。
感谢和问候,
京都
您的语法对于 ASE 中的正常 table 不正确。但是对于ASE,有一个特殊的table名称RPCtable可以将过程的输出映射为table格式的输出。也许这就是您正在寻找的……而且也可以从远程 ASE 调用它。
这是一个示例 --
use omni_rpc
go
create table rmtbl
(
aint int null,
bchr char(10) null,
cchr char(10) null
)
go
insert rmtbl values (11, "b_row1", "c_row1")
insert rmtbl values (22, "b_row2", "c_row2")
insert rmtbl values (33, "b_row3", "c_row3")
insert rmtbl values (44, "b_row4", "c_row4")
insert rmtbl values (55, "b_row5", "c_row6")
go
create proc procImm @Colnames varchar(100), @NameT varchar(20), @nameCol varchar
(20), @value char(2)
as
execute ('select ' + @Colnames + ' from ' + @NameT + ' where '
+ @nameCol + ' = ' + @value)
Here @NameT and @Colnames are command parameters, and @value is a search parameter based on the terms defined at the beginning of the paper.
In the local server:
use test
go
sp_addobjectdef myrpc_imm, "THIS.omni_rpc..procImm", "rpc"
go
(return status = 0)
create existing table myrpc_imm
(
NameT varchar(20),
nameCol varchar(20),
value varchar(10)
)
external procedure at "THIS.omni_rpc..procImm"
go
select * from myrpc_imm
where NameT = 'rmtbl' and nameCol = 'aint' and value = '33'
go
NameT nameCol value
-------------------- -------------------- ----------
(0 rows affected)
dbcc traceon(11225)
go
00:00000:00017:2004/04/01 12:18:47.03 server DBCC TRACEON 11225, SPID 17
DBCC execution completed. If DBCC printed error messages, contact a user with
System Administrator (SA) role.
select * from myrpc_imm
where NameT = 'rmtbl' and nameCol = 'aint' and value = '33'
go
NameT nameCol value
-------------------- -------------------- ----------
33 b_row3 c_row3
(1 row affected)
我正在从另一个存储过程 Y 调用 Sybase 存储过程 X。在 the answer to a similar question 之后,我创建了一个 #tmp_table 来保存存储过程 X 的结果。
create table #tmp_table(
col1 int,
col2 varchar(100),
...
) exec sp_stored_procedureX 888, 'Parameter2', ...
select * from #tmp_table
上面成功地将存储过程 X 的结果加载到 #tmp_table 中,但它显示了两次存储过程 X 的结果。我猜第一个来自“exec sp_stored_procedureX ...”部分,第二个来自“select * 来自#tmp_table”,这是我想要的。我不想显示第一个“exec sp_stored_procedureX ...”部分的结果。如何将数据存储到#tmp_table而不显示它?
如果需要更多 clarification/information,请告诉我。
感谢和问候,
京都
您的语法对于 ASE 中的正常 table 不正确。但是对于ASE,有一个特殊的table名称RPCtable可以将过程的输出映射为table格式的输出。也许这就是您正在寻找的……而且也可以从远程 ASE 调用它。 这是一个示例 --
use omni_rpc
go
create table rmtbl
(
aint int null,
bchr char(10) null,
cchr char(10) null
)
go
insert rmtbl values (11, "b_row1", "c_row1")
insert rmtbl values (22, "b_row2", "c_row2")
insert rmtbl values (33, "b_row3", "c_row3")
insert rmtbl values (44, "b_row4", "c_row4")
insert rmtbl values (55, "b_row5", "c_row6")
go
create proc procImm @Colnames varchar(100), @NameT varchar(20), @nameCol varchar
(20), @value char(2)
as
execute ('select ' + @Colnames + ' from ' + @NameT + ' where '
+ @nameCol + ' = ' + @value)
Here @NameT and @Colnames are command parameters, and @value is a search parameter based on the terms defined at the beginning of the paper.
In the local server:
use test
go
sp_addobjectdef myrpc_imm, "THIS.omni_rpc..procImm", "rpc"
go
(return status = 0)
create existing table myrpc_imm
(
NameT varchar(20),
nameCol varchar(20),
value varchar(10)
)
external procedure at "THIS.omni_rpc..procImm"
go
select * from myrpc_imm
where NameT = 'rmtbl' and nameCol = 'aint' and value = '33'
go
NameT nameCol value
-------------------- -------------------- ----------
(0 rows affected)
dbcc traceon(11225)
go
00:00000:00017:2004/04/01 12:18:47.03 server DBCC TRACEON 11225, SPID 17
DBCC execution completed. If DBCC printed error messages, contact a user with
System Administrator (SA) role.
select * from myrpc_imm
where NameT = 'rmtbl' and nameCol = 'aint' and value = '33'
go
NameT nameCol value
-------------------- -------------------- ----------
33 b_row3 c_row3
(1 row affected)