#sql-server
#sql-server
Вопрос:
У меня есть эта хранимая процедура, в которой я пытаюсь увидеть, что было только что вставлено в мою таблицу. Сюда также входит поле идентификатора с именем TestID . Я пытаюсь увидеть, что было только что вставлено, но VS2013 показывает мне синтаксическую ошибку еще до запуска хранимой процедуры. Может кто-нибудь указать, что я делаю неправильно?
INSERT INTO dbo.Test
(
Title,
ExamId,
CreatedBy,
CreatedDate,
ParentTestId,
TopicId
)
SELECT
Title,
@CreatedBy,
@CreatedDate,
@TestId,
TopicId
OUTPUT INSERTED.Title -- Error here <<
FROM Test
WHERE TestId = @TestId;
Я также попытался поместить ВЫВОД после WHERE, но он по-прежнему выдает ошибку «неправильный синтаксис».
Комментарии:
1. Какое сообщение об ошибке вы получаете?
Ответ №1:
OUTPUT
Предложение должно быть перед SELECT
предложением, например:
INSERT INTO dbo.Test
(
Title,
ExamId,
CreatedBy,
CreatedDate,
ParentTestId,
TopicId
)
OUTPUT INSERTED.Title INTO #tbl
SELECT
Title,
@CreatedBy,
@CreatedDate,
@TestId,
TopicId
FROM Test
WHERE TestId = @TestId;
Обратите внимание на использование OUTPUT...INTO
— вам нужно будет сохранить значения из OUTPUT
во временной таблице или табличной переменной, чтобы использовать их позже.
РЕДАКТИРОВАТЬ: если вы хотите использовать вместо этого табличную переменную, синтаксис остается прежним. Просто измените временную таблицу ( #tmp
) на табличную переменную @tmp
. Табличная переменная может быть объявлена следующим образом:
declare @tmp table(Title varchar(100))
Комментарии:
1. Можете ли вы привести пример того, как я могу сохранить некоторые из этих значений во временной таблице, а затем как я могу сделать так, чтобы SP возвращал эти значения после запуска?
2. Я уже это сделал.
#tmp
ваша временная таблица будет содержать значения, которые вы хотите включить. В вашей хранимой процедуре вы можете просто добавить aSELECT
для извлечения из временной таблицы.3. Когда я добавил ваш код, он выдает ошибку «SQL71502: неразрешенная ссылка на объект # tbl»
4. Это потому, что я не включил код для создания временной таблицы. Сначала вам нужно будет добавить это. В качестве альтернативы вы можете использовать табличную переменную, которую вам также нужно будет объявить, прежде чем вы сможете использовать
OUTPUT...INTO
с ней.5. Как бы я это сделал с табличной переменной?