Получить вставленное значение вычисляемого столбца SQL

Моя структура таблицы, как показано ниже,

CREATE TABLE tbl_Info
(
    [SSEID]         BIGINT              NOT NULL    IDENTITY(1,1),
    [ShortenKey]    AS ConvertToBase([SSEID]),
    [Title]         VARCHAR(500)        NULL,       
)

ConvertToBase Функция, как показано ниже,

CREATE FUNCTION ConvertToBase(@Number BIGINT)
RETURNS VARCHAR(15)
AS 
BEGIN
      // implementation
END

Мне нужно получить сгенерированное значение [ShortenKey] после запроса INSERT в sp. как это сделать?


person Sency    schedule 15.06.2011    source источник


Ответы (2)


Использовать предложение OUTPUT?

INSERT tbl_Info (Title)
OUTPUT INSERTED.ShortenKey
VALUES ('new title')

Примечание: может не работать с вычисляемыми столбцами, говорит MSDN, если я правильно его прочитал.

person gbn    schedule 15.06.2011
comment
Спасибо за ответ, но эта ошибка ... Столбец 'Insert.ShortenKey' не может быть указан в предложении OUTPUT, потому что определение столбца содержит подзапрос или ссылается на функцию, которая выполняет доступ к пользовательским или системным данным. По умолчанию предполагается, что функция выполняет доступ к данным, если она не привязана к схеме. Рассмотрите возможность удаления подзапроса или функции из определения столбца или удаления столбца из предложения OUTPUT. - person Sency; 15.06.2011
comment
Добавьте WITH SCHEMABINDING к функции - person gbn; 15.06.2011

Используйте SCOPE_IDENTITY, чтобы получить новое значение идентичности. Затем запросите вновь вставленную строку.

SELECT ShortenKey
FROM dbo.tbl_Info
WHERE SSEID = SCOPE_IDENTITY()
person Anthony Faull    schedule 15.06.2011
comment
@gbn Мой пример кода возвращает ShortenKey. Я что-то упускаю? - person Anthony Faull; 15.06.2011