Chèn kết quả từ một thủ tục được lưu trữ vào một biến bảng


11

Tôi có một thủ tục được lưu trữ lưu trữ các giá trị trong một biến bảng. Tôi chọn các giá trị này và trả về chúng khi thủ tục được gọi.

Tôi đang cố gắng đặt các giá trị trả về này trong một biến bảng khác nhưng tôi không thể tìm ra nó.

Thủ tục lưu trữ

ALTER PROCEDURE [dbo].[GetOrSetDomainId]
@DomainName varchar(50),
@DomainUrl varchar(50)
AS
BEGIN
    DECLARE @DomainId bigint;
    DECLARE @NumberOfRwos bigint;

    DECLARE @DomainHistory TABLE
    (
        DomainId bigint, 
        HasHistory bit,
        ServerOnline bit,
        DatabaseOnline bit, 
        ServerPerformance bigint,
        DatabasePerformance bigint, 
        SoldTickets bigint
    )


    SELECT  @NumberOfRwos =  COUNT(Id) 
    FROM DomainData
    WHERE DomainName = @DomainName OR DomainUrl = @DomainUrl

    IF(@NumberOfRwos = 0)
    BEGIN
        INSERT INTO DomainData (DomainName, DomainUrl) VALUES (@DomainName, @DomainUrl)

         SELECT @DomainId =  @@IDENTITY

         INSERT INTO @DomainHistory(DomainId,HasHistory)VALUES(@DomainId, 0)

         SELECT * FROM @DomainHistory
    END

    ELSE
    BEGIN
    ---not important here----
    END

END

Mã gọi

Tôi gọi thủ tục bằng cách sử dụng:

DECLARE @DomainHistory TABLE
(
    DomainId bigint, 
    HasHistory bit,
    ServerOnline bit,
    DatabaseOnline bit, 
    ServerPerformance bigint,
    DatabasePerformance bigint, 
    SoldTickets bigint
)

SET @DomainHistory = EXEC GetOrSetDomainId 'test', 'test2'
---Other alternatives:---
INSERT INTO @DomainHistory(DomainId,HasHistory)
VALUES(EXEC GetOrSetDomainId 'test', 'test2')

Tôi có thể làm cái này như thế nào?


Ngẫu nhiên, @@IDENTITYcó thể đưa ra các giá trị bất ngờ, khi kích hoạt có liên quan. SCOPE_IDENTITY()nói chung là tốt nhất Thêm
Jon của tất cả các giao dịch

Câu trả lời:


14

Để chèn kết quả vào bảng, bạn chỉ muốn INSERT....EXEC...không phải là VALUESmột phần của truy vấn.

Trong trường hợp của bạn, điều này sẽ trông như sau:

INSERT INTO @DomainHistory(DomainId,HasHistory)
EXEC GetOrSetDomainId 'test', 'test2';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.