2013-07-17 2 views
8

SELECT Val from storedp_Value в редакторе запросов SQL Server Management Studio, возможно ли это?SELECT против хранимой процедуры 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 

Что я делаю неправильно и как я называю это из окна запроса?

UPDATE # 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 Мне нужно УДАЛИТЬ И ВСТАВИТЬ хотя, что из того, что я читал, невозможно. – Nate

+0

Или вы можете использовать «обходной путь», создавая временную таблицу, вставляя в нее результаты из SP, а затем выбираете из таблицы temp. –

ответ

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

Попробуйте

Изменить 'Return'

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 
1

Лучшая статья (на мой взгляд) обо всех возможных методах обмена данными между хранимых процедур в SQL Server вы можете найти здесь : http://www.sommarskog.se/share_data.html

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», может быть, я могу быть лучшей помощью этого способа.

Cheers!

+0

FTR, я согласен с @GordonLinoff, в этом случае ваша «пакетная хранимая процедура» будет реализована гораздо проще, чем Scalar UDF (опять же, если предположить, что это не действует на SET) –

Смежные вопросы