Получить таблицу OUTPUT из SQL INSERT, используя. NET - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь получить таблицу OUTPUT из команды INSERT для SQL Базы данных сервера (v14).

 DECLARE @i TABLE (TICKET_ID int, CREATED_DATE datetime);

 INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID) 
 OUTPUT INSERTED.TICKET_ID, INSERTED.CREATED_DATE INTO @i 
 VALUES (@s, @t, @q);

 SELECT * FROM @i;

У меня есть 3 параметра, которые заполняются для сайта, название заявки и пользователь @s, @t и @u соответственно.

Я вызываю команду, используя объект SqlClient.SqlDataReader с функцией ExecuteReader на платформе 4.5.

Команда успешно вставляет запись в таблица базы данных, но не возвращает таблицу @i с идентификатором билета (автоматическим увеличением) и датой создания (по умолчанию = GETDATE), которую я должен представить пользователю после сохранения в базе данных.

Я поиграл с удалением @i TABLE в команде, но получаю ошибку. NET:

В имени целевой таблицы оператора DML не может быть включено срабатывает, если инструкция содержит предложение OUTPUT без предложения INTO

Я нашел пару ссылок, которые предоставляют некоторые способы их устранения, но это не исправило моя проблема

https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/ms971497 (v = msdn.10)? redirectedfrom = MSDN

Невозможно использовать UPDATE с предложением OUTPUT, когда триггер находится на таблице

Можно ли оказать какую-либо помощь в достижении моих целей?

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Кажется, что это неприятно, но другой вариант может быть просто сделать это:

 INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID) 
 VALUES (@s, @t, @q);

 SELECT TICKET_ID, CREATED_DATE 
 FROM dbo.TICKET 
 WHERE SITE_ID = @s AND TICKET_TITLE = @t AND USER_ID = @q;
0 голосов
/ 08 января 2020

Не знаю, зачем вам стол. Я думаю, вам нужно просто выполнить это:

       INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID) 
       OUTPUT inserted.TICKET_ID, inserted.CREATED_DATE
       VALUES (@s, @t, @q);

Я не вижу никакого значения в таблице. Когда вы выполните этот оператор, он вернет результаты клиенту, точно так же, как оператор SELECT.

Надеюсь, это поможет.

...