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?
@@IDENTITY
peut donner des valeurs inattendues, lorsque des déclencheurs sont impliqués.SCOPE_IDENTITY()
est généralement le meilleur. En savoir plusRéponses:
Pour insérer les résultats dans un tableau, vous ne voulez tout simplement
INSERT....EXEC...
pas laVALUES
partie de la requête.Dans votre cas, cela ressemblerait à ceci:
la source