У меня есть хранимая процедура, которая хранит значения в табличной переменной. Я выбираю эти значения и возвращаю их при вызове процедуры.
Я пытаюсь установить эти возвращаемые значения в другой табличной переменной, но я не могу понять это.
Хранимая процедура
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
Телефонный код
Я называю процедуру, используя:
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')
Как я могу это сделать?
@@IDENTITY
может дать неожиданные значения, когда задействованы триггеры.SCOPE_IDENTITY()
как правило, лучше. ПодробнееОтветы:
Чтобы вставить результаты в таблицу, вам просто
INSERT....EXEC...
не нужнаVALUES
часть запроса.В вашем случае это будет выглядеть следующим образом:
источник