Saklı yordamın sonuçlarını tablo değişkenine ekleme


12

Tablo değişkeninde değerleri saklayan bir saklı yordam var. Bu değerleri seçiyorum ve prosedür çağrıldığında bunları döndürüyorum.

Başka bir tablo değişkeninde bu dönüş değerlerini ayarlamaya çalışıyorum ama anlayamıyorum.

Saklı yordam

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

Telefon kodu

Prosedürü kullanarak çağırıyorum:

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

Bunu nasıl yapabilirim?


Bu arada, @@IDENTITYtetikleyiciler söz konusu olduğunda beklenmedik değerler verebilir. SCOPE_IDENTITY()genellikle en iyisidir. Daha fazla
All Trades Jon

Yanıtlar:


14

Bir tabloya sonuçlarını eklemek için, sadece istediğiniz INSERT....EXEC...değil VALUESsorgunun parçası.

Sizin durumunuzda, bu aşağıdaki gibi görünecektir:

INSERT INTO @DomainHistory(DomainId,HasHistory)
EXEC GetOrSetDomainId 'test', 'test2';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.