2013-07-17 30 views
8

SELECT Val from storedp_Value的選擇,這可能嗎?對SQL Server管理工作室的查詢編輯器中的存儲過程SQL Server

UPDATE

我試圖創建一個臨時表,但它似乎沒有工作,因此爲什麼我在這裏問。

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 

這是更大的選擇語句的一部分。任何幫助將非常感激。基本上,這個SQL在我們爲Oracle遷移時已經被破壞了。

+3

不,這是不可能的。如果這是必需的,你應該使用函數。 –

+0

@NenadZivkovic我需要DELETE和INSERT,但從我讀過的東西是不可能的。 – Nate

+0

或者,您可以通過創建臨時表來使用「解決方法」,從SP中插入結果,然後從臨時表中進行選擇。 –

回答

11

那麼,沒有。爲了從存儲過程中選擇,你可以做到以下幾點:

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

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

如果你以這種方式使用結果從一個存儲過程,你寫的存儲過程,認真考慮改變代碼是一個視圖或用戶定義的功能。在很多情況下,您可以使用更簡單,更適合的構造來替換此類代碼。

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>') 
+1

您不必在'INSERT INTO'部分再次重複列,SQL將填充表格而不明確指定它們。 – MeanGreen

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 
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 
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; 

如果是這樣遙遠的基礎,請提供DDL爲「batchno_seq」,也許我可以更好的援助方式。

乾杯!

+0

FTR,我同意@GordonLinoff,在這種情況下,您的「批量存儲過程」將作爲Scalar UDF更簡單地實現(同樣,假設這不是在SET上運行) –

相關問題