Sql 查询存储过程的结果

Sql 查询存储过程的结果,sql,stored-procedures,sybase,Sql,Stored Procedures,Sybase,我有一个返回大量结果的存储过程,并且希望有一种更好的方法来调试/解析结果,而不是将结果复制/粘贴到excel或其他任何东西中—有没有一种方法可以将该过程的结果传递到查询中?e、 例如,如果过程调用类似于: exec database..proc 'arg1','arg2','arg3' select distinct column1 from (exec database..proc 'arg1','arg2','arg3') 我的想法是这样做: exec database..proc '

我有一个返回大量结果的存储过程,并且希望有一种更好的方法来调试/解析结果,而不是将结果复制/粘贴到excel或其他任何东西中—有没有一种方法可以将该过程的结果传递到查询中?e、 例如,如果过程调用类似于:

exec database..proc 'arg1','arg2','arg3'
select distinct column1 from 
(exec database..proc 'arg1','arg2','arg3')
我的想法是这样做:

exec database..proc 'arg1','arg2','arg3'
select distinct column1 from 
(exec database..proc 'arg1','arg2','arg3')
这显然不起作用,否则我就不在这里了。如果重要的话,这是针对sybase数据库的


谢谢

您可以在sp中创建临时表temp,并在其中填充结果集。以后可以从同一会话的同一临时表中进行选择。或者在sybase中使用带有临时语法的全局临时表


这是因为在sybase中无法直接执行从exec sp选择*的操作。下面的代码在MS SQL 2005中工作。我现在没有Sybase安装来测试它。如果它在Sybase中工作,那么您可以在存储过程之外使用临时表或永久表,这样您就不必修改您试图测试的代码,而这通常不是一个非常好的测试过程

CREATE TABLE dbo.Test_Proc_Results_To_Table
(
    my_id       INT         NOT NULL,
    my_string   VARCHAR(20) NOT NULL
)
GO

CREATE PROCEDURE dbo.Test_Proc_Results_To_Table_Proc
AS
BEGIN
    SELECT
        1 AS my_id,
        'one' AS my_string
END
GO

INSERT INTO dbo.Test_Proc_Results_To_Table (my_id, my_string)
EXEC dbo.Test_Proc_Results_To_Table_Proc
GO

SELECT * FROM dbo.Test_Proc_Results_To_Table
GO

是否可以将存储的过程重写为返回表的函数?在SQL Server上,这当然是可能的。然后你可以做

select
    <any columns you like>
from
    dbo.myFunc( 'foo', 'bar', 1 )
where
    <whatever clauses you like>
order by
    <same>

我不熟悉Sybase,但在MySQL中,您可以使用in参数为所有这些编写一个SQL查询。例:


选择distinct column1 from table,其中column1在带有所有参数的\u first\u查询\u中。解决此问题的唯一实际方法是在数据库中创建一个表来存储临时值

假设存储过程选择Column1、Column2和Column3

创建一个包含Column1、Column2、Column3的表,并将存储过程设置为:

CREATE PROCEDURE database..proc
AS
BEGIN
  DELETE FROM tempTable

  INSERT INTO tempTable (Column1, Column2, Column3)
  SELECT Column1, Column2, Column3 
  FROM Table1 
END

then for your sql code to select the values have:

exec database..proc
SELECT Column1, Column2, Column3 
FROM tempTable

我希望这能有所帮助,我以前也遇到过类似的问题,这是我能解决的最好的问题。

在SQL Anywhere 10和11中,我没有看到您询问的是ASA还是ASE:

SELECT DISTINCT Column1
FROM procName(parameter1, parameter2, parameter3);

我没有ASE,我也不确定这是否适用于早期ASA版本。

我现在没有安装Sybase,因此一些次要的语法方面可能有错误-我无法检查,但我过去广泛使用过它:从程序名“arg1”和“arg2”中选择*进入临时状态,“arg3”应使用正确的列自动为您创建本地临时表。在同一事务或开始/结束块中,您可以通过选择*from temp来访问temp