Ich habe eine gespeicherte Prozedur, die Werte in einer Tabellenvariablen speichert. Ich wähle diese Werte aus und gebe sie zurück, wenn die Prozedur aufgerufen wird.
Ich versuche, diese Rückgabewerte in einer anderen Tabellenvariablen festzulegen, kann es aber nicht herausfinden.
Gespeicherte Prozedur
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
Code anrufen
Ich rufe die Prozedur auf mit:
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')
Wie kann ich das machen?
@@IDENTITY
Kann übrigens unerwartete Werte ergeben, wenn Trigger beteiligt sind.SCOPE_IDENTITY()
ist in der Regel am besten. MehrAntworten:
Um die Ergebnisse in eine Tabelle einzufügen, möchten Sie nur
INSERT....EXEC...
nicht denVALUES
Teil der Abfrage.In Ihrem Fall würde dies folgendermaßen aussehen:
quelle