2008-10-17 27 views
13

Tôi có một sproc mà trả về một dòng duy nhất và cột với một văn bản, tôi cần phải thiết lập văn bản này cho một biến, một cái gì đó như:Đặt một giá trị SP trở về một biến trong SQL Server

declare @bla varchar(100) 
select @bla = sp_Name 9999, 99989999, 'A', 'S', null 

nhưng tất nhiên, mã này không hoạt động ...

cảm ơn!

Trả lời

29

Nếu bạn không thể thay đổi các thủ tục lưu trữ, giải pháp khác sẽ được xác định một bảng tạm thời, và chèn kết quả vào

rằng Thông tin
DECLARE @Output VARCHAR(100) 

CREATE TABLE #tmpTable 
(
    OutputValue VARCHAR(100) 
) 
INSERT INTO #tmpTable (OutputValue) 
EXEC dbo.sp_name 9999, 99989999, 'A', 'S', null 

SELECT 
    @Output = OutputValue 
FROM 
    #tmpTable 

DROP TABLE #tmpTable 
+0

Sẽ rất tiện dụng (nếu bạn có quyền) để thiết lập này như là proc được lưu trữ của riêng bạn với nhiều giá trị hơn. Rất có thể bạn sẽ muốn gọi điều này nhiều lần. – brianb

+0

Điều này dường như không làm việc cho tôi trong T-SQL SQL2005. Sp của tôi trả về một int. Tôi tạo ra bảng tạm thời, không có lỗi cú pháp và nó chạy, nhưng sau đó int trong bảng tạm thời không có giá trị. Giải pháp được cung cấp bởi DiGi [trên trang này] đã làm việc cho tôi. thx – raddevus

+0

Tôi đã kiểm tra điều này trên SQL Server 2008 R2. Làm việc tốt của nó – Shanaka

19

Nếu stored procedure được trả lại một giá trị duy nhất bạn có thể xác định một trong những thông số trên thủ tục lưu trữ là một biến OUTPUT, và sau đó là thủ tục lưu trữ sẽ thiết lập giá trị của tham số

CREATE PROCEDURE dbo.sp_Name 
    @In INT, 
    @Out VARCHAR(100) OUTPUT 

AS 
BEGIN 
    SELECT @Out = 'Test' 
END 
GO 

Và sau đó, bạn sẽ có được giá trị đầu ra như sau

DECLARE @OUT VARCHAR(100) 
EXEC sp_name 1, @Out OUTPUT 
PRINT @Out 
+0

vấn đề là tôi không thể thay đổi mã của thủ tục ... – Bruno

15
DECLARE 
    @out INT 

EXEC @out = sp_name 'param', 2, ... 

khác ở T-SQL "EXECUTE" help (Help là từ MSSQL 2008 nhưng công trình này vào năm 2000 quá)

+0

Điều này chỉ hoạt động đối với các quy trình có tham số OUT. Không phải khi thủ tục trả về giá trị vô hướng (đó là trường hợp cho câu hỏi ban đầu.) – Bill

+0

Hoạt động ít nhất trong năm 2012, không được kiểm tra trong năm 2008 – JBone

Các vấn đề liên quan