2013-07-17 15 views
8

SELECT Val from storedp_Value trong trình chỉnh sửa truy vấn của SQL Server Management Studio, điều này có khả thi không?SELECT đối với thủ tục được lưu trữ SQL Server

CẬP NHẬT

tôi đã cố gắng để tạo ra một bảng tạm thời nhưng nó dường như không làm việc vì lý do tại sao tôi hỏi ở đây.

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

Stored Procedure UpdateBatch

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

Tôi đang làm gì sai và làm thế nào để tôi gọi nó từ cửa sổ truy vấn?

CẬP NHẬT # 2

Ok, tôi đánh giá cao sự giúp đỡ về thế này, chỉ đạo hoặc bất cứ điều gì - đây là những gì tôi đang cố gắng để đạt được.

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

Đây là một phần của tuyên bố chọn lớn hơn. Bất kì sự trợ giúp nào đều được đánh giá cao. Về cơ bản, SQL này bị hỏng khi chúng ta đã di trú sang Oracle.

+3

Không thể thực hiện được. Bạn nên sử dụng các hàm nếu đó là một yêu cầu. –

+0

@NenadZivkovic Tôi cần phải DELETE và INSERT mặc dù, từ những gì tôi đã đọc là không thể. – Nate

+0

Hoặc bạn có thể sử dụng 'cách giải quyết' bằng cách tạo bảng tạm thời, chèn kết quả từ SP vào nó, và sau đó chọn từ bảng tạm thời. –

Trả lời

11

Vâng, không. Để chọn từ một stored procedure bạn có thể làm như sau:

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

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

Nếu bạn đang sử dụng kết quả từ một thủ tục lưu trữ theo cách này bạn đã viết các thủ tục lưu trữ, nghiêm túc xem xét việc thay đổi mã để có một cái nhìn hoặc hàm do người dùng xác định. Trong nhiều trường hợp, bạn có thể thay thế mã như vậy bằng một cấu trúc đơn giản hơn, phù hợp hơn.

5

này là không thể trong sql server, bạn có thể chèn các kết quả vào một bảng tạm thời và sau đó tiếp tục truy vấn mà

CREATE TABLE #temp (/* columns */) 

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

SELECT * FROM #temp 
WHERE 1=1 

DROP TABLE #temp 

Hoặc bạn có thể sử dụng OPENQUERY nhưng điều này đòi hỏi phải thiết lập một máy chủ được liên kết, các SQL là

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

Bạn không phải lặp lại các cột trong phần 'INSERT INTO', SQL sẽ điền vào bảng mà không chỉ rõ chúng một cách rõ ràng. – MeanGreen

0

Hãy thử

Change 'Return' này

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

để 'Chọn'

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

Tiếp cận của tôi

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

Các bài viết hay nhất (theo ý kiến ​​của tôi) về tất cả các phương pháp có thể chia sẻ dữ liệu giữa các thủ tục lưu trữ trong SQL Server bạn có thể tìm thấy ở đây : http://www.sommarskog.se/share_data.html

0

Tôi PHẢI bị thiếu thứ gì đó.

Vì thủ tục lưu trữ của bạn không trả về tập kết quả, và thay vào đó trả về số nguyên, sử dụng chức năng RETURN của procs được lưu trữ, bạn chỉ cần KHÔNG THỂ CH INSN vào bảng BẤT K ((vì không có bất kỳ kết quả nào được trả về,).NHƯNG, bạn có thể (giả định rằng điều này được thực hiện lặp đi lặp lại, và không quá một bộ) chỉ cần lưu giá trị trả về vào biến cục bộ và chèn giá trị của biến đó vào bất kỳ bảng nào là cần thiết.

Tuy nhiên, nếu bạn chỉ muốn trả lại giá trị trong kết quả của Cửa sổ truy vấn trong SSMS, việc INSERT và CHỌN là quá mức cần thiết. Dường như với tôi như thế này sẽ đủ (trong một cửa sổ truy vấn):

DECLARE @RetVal INT = 0; 

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

Nếu đây là cách xa cơ sở, vui lòng cung cấp DDL cho "batchno_seq", có lẽ tôi có thể hỗ trợ tốt hơn theo cách đó.

Chúc mừng!

+0

FTR, tôi đồng ý với @GordonLinoff, trong trường hợp này, "Quy trình lưu trữ hàng loạt" của bạn sẽ được triển khai đơn giản hơn nhiều như một UDG vô hướng (một lần nữa, giả sử rằng điều này không hoạt động trên SET) –