针对存储过程SQL Server的SELECT

时间:2013-07-17 10:45:15

标签: sql sql-server sql-server-2008 tsql

SQL Server Management Studio的查询编辑器中的

SELECT Val from storedp_Value可能吗?

更新

我试图创建一个临时表,但它似乎没有用,因此我在这里问。

CREATE TABLE #Result
(
batchno_seq_no int
)
INSERT #Result EXEC storedp_UPDATEBATCH
SELECT * from #Result
DROP TABLE #Result
RETURN

存储过程UpdateBatch

delete from batchno_seq;
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
RETURN @batchno_seq

我做错了什么以及如何从查询窗口调用它?

更新#2

好的,我很欣赏这方面的帮助,方向或任何事情 - 这就是我想要实现的目标。

 select batchno_seq from (delete from batchno_seq;insert into batchno_seq default values;
 select *  from batchno_seq) BATCHNO 
 INTO TEMP_DW_EKSTICKER_CLASSIC

这是较大的select语句的一部分。任何帮助将非常感激。基本上,当我们为Oracle迁移时,这个SQL就被打破了。

6 个答案:

答案 0 :(得分:13)

嗯,不。要从存储过程中进行选择,您可以执行以下操作:

declare @t table (
    -- columns that are returned here
);

insert into @t(<column list here>)
    exec('storedp_Value');

如果以这种方式使用存储过程的结果编写了存储过程,请认真考虑将代码更改为视图或用户定义的函数。在许多情况下,您可以使用更简单,更适合的构造替换此类代码。

答案 1 :(得分:5)

这在sql server中是不可能的,你可以将结果插入临时表然后进一步查询

CREATE TABLE #temp ( /* columns */ )

INSERT INTO #temp ( /* columns */ )
EXEC sp_MyStoredProc

SELECT * FROM #temp
WHERE 1=1

DROP TABLE #temp

或者您可以使用OPENQUERY,但这需要设置链接服务器,SQL是

SELECT * FROM (ThisServer, 'Database.Schema.ProcedureName <params>')

答案 2 :(得分:1)

关于在SQL Server中存储过程之间共享数据的所有可能方法的最佳文章(在我看来),您可以在此处找到:http://www.sommarskog.se/share_data.html

答案 3 :(得分:0)

试试这个

更改'返回'

delete from batchno_seq;   
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
RETURN @batchno_seq

到'选择'

delete from batchno_seq;   
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
SELECT @batchno_seq

答案 4 :(得分:0)

我的方法

select * into new_table  from (select t1.col1,t1.col2,..
from table1 t1 
union 
select t2.cola,t2.colb,..
from table2 t2) as union_table

答案 5 :(得分:0)

我必须遗漏一些东西。

由于您的存储过程不返回结果集,而是返回一个整数,使用存储过程的RETURN功能,您只是无法插入任何表(因为根本没有任何结果集返回)

但是,您可以(假设这是迭代完成的,而不是在集合上完成)只是将返回值存储到局部变量中,并将该变量的值插入到任何必要的表中。

但是,如果您只想在SSMS中的查询窗口的结果中返回值,则执行INSERT和SELECTING是过度的。 在我看来,这就足够了(在查询窗口中):

DECLARE @RetVal INT = 0;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
EXEC @RetVal = storedp_UPDATEBATCH;
COMMIT TRANSACTION;
SELECT @RetVal;
  --OR
  --PRINT @RetVal;

如果远离基地,请提供“batchno_seq”的DDL,也许我可以提供更好的帮助。

干杯!