Возвращаемое значение из команды SQL Server Insert с использованием c #

Используя C # в Visual Studio, я вставляю строку в таблицу следующим образом:

INSERT INTO foo (column_name) VALUES ('bar') 

Я хочу сделать что-то подобное, но я не знаю правильного синтаксиса:

 INSERT INTO foo (column_name) VALUES ('bar') RETURNING foo_id 

Это вернет столбец foo_id из недавно вставленной строки.

Более того, даже если я нахожу правильный синтаксис для этого, у меня есть другая проблема: у меня есть SqlDataReader и SqlDataAdapter в моем распоряжении. Насколько мне известно, первая предназначена для чтения данных, вторая предназначена для манипулирования данными. При вставке строки с оператором return я обрабатываю и считываю данные, поэтому я не уверен, что использовать. Может быть, есть что-то совершенно другое, что я должен использовать для этого?

SCOPE_IDENTITY возвращает последнее значение идентификации, вставленное в столбец идентификатора в той же области. Объем – это модуль: хранимая процедура, триггер, функция или партия. Поэтому два оператора находятся в одной области, если они находятся в одной и той же хранимой процедуре, функции или партии.

Вы можете использовать SqlCommand.ExecuteScalar для выполнения команды insert и получения нового идентификатора в одном запросе.

 using (var con = new SqlConnection(ConnectionString)) { int newID; var cmd = "INSERT INTO foo (column_name)VALUES (@Value);SELECT CAST(scope_identity() AS int)"; using (var insertCommand = new SqlCommand(cmd, con)) { insertCommand.Parameters.AddWithValue("@Value", "bar"); con.Open(); newID = (int)insertCommand.ExecuteScalar(); } } 

попробуй это:

 INSERT INTO foo (column_name) OUTPUT INSERTED.column_name,column_name,... VALUES ('bar') 

OUTPUT может возвращать результирующий набор (между прочим), см.: Раздел OUTPUT (Transact-SQL) . Кроме того, если вы вставляете несколько значений (INSERT SELECT), этот метод возвращает одну строку на вставленную строку, где другие методы возвращают только информацию в последней строке.

рабочий пример:

 declare @YourTable table (YourID int identity(1,1), YourCol1 varchar(5)) INSERT INTO @YourTable (YourCol1) OUTPUT INSERTED.YourID VALUES ('Bar') 

ВЫВОД:

 YourID ----------- 1 (1 row(s) affected) 

Я думаю, вы можете использовать @@ IDENTITY для этого, но я думаю, что вокруг него есть специальные правила / ограничения?

 using (var con = new SqlConnection("connection string")) { con.Open(); string query = "INSERT INTO table (column) VALUES (@value)"; var command = new SqlCommand(query, con); command.Parameters.Add("@value", value); command.ExecuteNonQuery(); command.Parameters.Clear(); command.CommandText = "SELECT @@IDENTITY"; int identity = Convert.ToInt32(command.ExecuteScalar()); } 
Interesting Posts

Имя триггера T-SQL и имя таблицы

Преобразование варбина и изображений

t-sql insert – выберите – с параметрами

MMC не удалось создать оснастку диспетчера конфигурации SQL Server

Создание файла jar, содержащего команды SQL в Netbeans

Sql Server 2005 – вставить, если не существует

Найдите, какие параметры хранимых процедур имеют значение NULL (необязательно)

возвращаемый выходной параметр в sql-сервере

Как вернуть нулевое значение, если в объединенной таблице не найдено записей

SQL: выбор верхней записи для группы столбцов

Как сбросить начальное значение идентификатора приращения в SQL Server

Не удается войти в систему с использованием проверки подлинности SQL ТОЛЬКО с удаленного сервера

Ограничение размера базы данных для SQL Express Edition

SQL Server 2005 находит все столбцы в базе данных для определенного типа данных

Подобная функция SQL Server аналогична функции postgres

Давайте будем гением компьютера.