Insérez les résultats d'une procédure stockée dans une variable de table

11

J'ai une procédure stockée qui stocke des valeurs dans une variable de table. Je sélectionne ces valeurs et les renvoie lorsque la procédure est appelée.

J'essaye de placer ces valeurs de retour dans une autre variable de table mais je ne peux pas la figurer dehors.

Procédure stockée

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

Indicatif d'appel

J'appelle la procédure en utilisant:

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

Comment puis-je faire ceci?

ThunD3eR
la source
Par ailleurs, @@IDENTITYpeut donner des valeurs inattendues, lorsque des déclencheurs sont impliqués. SCOPE_IDENTITY()est généralement le meilleur. En savoir plus
Jon of All Trades du

Réponses:

14

Pour insérer les résultats dans un tableau, vous ne voulez tout simplement INSERT....EXEC...pas la VALUESpartie de la requête.

Dans votre cas, cela ressemblerait à ceci:

INSERT INTO @DomainHistory(DomainId,HasHistory)
EXEC GetOrSetDomainId 'test', 'test2';
Mark Sinkinson
la source